GitHub的原理及应用详解(二)

本系列文章简介:

        GitHub是一个基于Git版本控制系统的代码托管平台,为开发者提供了一个方便的协作和版本管理的工具。它广泛应用于软件开发项目中,包括但不限于代码托管、协作开发、版本控制、错误追踪、持续集成等方面。

        GitHub的原理可以简单概括为,在本地创建一个仓库(repository),可以将项目的代码和文件上传到仓库中进行管理。每次对代码的修改都会生成一个新的版本,并记录下修改的内容和时间等信息。在需要协作开发时,可以将仓库分享给其他人,他们可以下载仓库的代码进行修改,并通过提交(commit)和推送(push)操作将自己的修改合并到仓库中。同时,也可以通过分支(branch)的机制来进行并行开发和测试,并最终合并到主分支(master)中。GitHub还提供了一系列的工具和功能,如问题追踪、代码审查、持续集成等,以帮助团队更好地协作和管理项目。

        GitHub的应用领域非常广泛,它不仅被广泛应用于开源项目中,也被许多企业和组织用于私有项目的管理。通过GitHub,开发人员可以方便地查看和下载其他人开源的项目,学习和借鉴优秀的代码实践和技术。同时,他们也可以将自己的项目托管到GitHub中,与全球的开发者社区分享和合作,提高代码的质量和可靠性。对于企业和组织来说,GitHub提供了一个便捷的方式来管理和协作开发项目,提高开发效率和团队合作能力。

        在本系列文章中,我们将深入探讨GitHub的原理和应用,从基础的使用教程到高级的功能和工具的应用,帮助大家更好地理解和使用GitHub来管理和协作开发项目。无论是初学者还是有一定经验的开发者,都可以从本系列文章中获取到有价值的知识和实践经验。希望本系列文章能够帮助大家提高开发效率和团队合作能力,并在开发过程中取得更好的成果。

        欢迎大家订阅《Java技术栈高级攻略》专栏(PS:近期会涨价),一起学习,一起涨分!

目录

一、引言

二、GitHub的基本原理

2.1 版本控制系统概述

2.2 Git原理

2.2.1 Git的基本概念:仓库、提交、分支、标签等

2.2.2 Git的工作原理:快照、暂存区、HEAD等

2.2.3 Git命令基础

1. 初始化仓库

2. 克隆仓库

3. 添加文件到暂存区

4. 提交更改

5. 查看状态

6. 查看提交历史

7. 分支操作

8. 拉取和推送更改

9. 标签操作

10. 其他常用命令

2.3 GitHub与Git的关系

2.3.1 本地Git仓库与远程GitHub仓库的同步

2.3.2 协作开发流程

三、GitHub的应用

3.1 个人项目管理

3.2 团队协作

3.3 开源社区参与

3.4 自动化与持续集成

3.5 企业级应用

四、GitHub的高级特性

五、GitHub的最佳实践

六、结论和展望

七、结语


一、引言

        GitHub是一个面向开源及私有软件项目的托管平台,因其只支持Git作为唯一的版本库格式进行托管而得名。GitHub提供Git仓库的托管服务,并具备多种功能,帮助软件开发者更高效地协作和管理代码。

        本文将跟随《GitHub的原理及应用详解(一)》的进度,继续介绍GitHub。希望通过本系列文章的学习,您将能够更好地理解GitHub的内部工作原理,掌握GitHub的使用技巧,以及通过合理的设计完成最佳实践,充分发挥优化GitHub的潜力,为系统的高效运行提供有力保障。

二、GitHub的基本原理

2.1 版本控制系统概述

        详见《GitHub的原理及应用详解(一)

2.2 Git原理

2.2.1 Git的基本概念:仓库、提交、分支、标签等

Git是一个开源的分布式版本控制系统,它允许开发者高效地管理项目的版本。以下是Git中仓库、提交、分支和标签的基本概念:

  1. 仓库(Repository)

    • Git仓库是一个由Git跟踪管理的项目工作目录。
    • 它包含了项目的所有文件、历史记录和版本信息。
    • Git仓库的核心是一个名为.git的隐藏文件夹,其中存储了整个仓库的元数据和对象数据库。
    • 开发者可以通过克隆(git clone)操作在本地机器上获得一个完整的Git仓库副本。
  2. 提交(Commit)

    • 提交是Git版本控制中的基本单位,代表了对仓库状态的改变。
    • 每当开发者完成了一组代码更改并希望保存这些更改时,他们都会创建一个新的提交。
    • 提交会记录更改的作者、时间戳、提交信息(通常是一个简短的描述)以及更改的具体内容。
    • 通过提交,开发者可以追踪和管理项目的历史记录。
  3. 分支(Branch)

    • 分支是Git中的一个核心概念,它允许开发者在主线(通常是主分支或master分支)之外进行开发。
    • 分支是从主线分离出来进行另外的操作的,它不会影响主线,主线可以继续进行其他工作。
    • 分支可以用来解决临时需求、进行新功能开发或修复bug等。
    • 开发者可以在分支上自由地进行代码更改,并通过合并(merge)操作将分支的更改合并回主线。
    • Git的分支机制支持多线程的开发流程,从而实现版本的并行开发。
  4. 标签(Tag)

    • 标签是Git中用于标记特定提交点的机制。
    • 它通常用于标记发布版本、重要里程碑或特定的历史版本。
    • 标签可以作为一个指针指向某个特定的提交,使得开发者可以轻松地引用和查找该提交。
    • 与分支不同,标签是静态的,它们不会随着新的提交而移动。
    • Git标签的最大优点就是不会随着代码的修改而改变,这意味着标签是永久性的,并且可以在未来的任意时刻被检索到。

以上是Git中仓库、提交、分支和标签的基本概念。这些概念是Git版本控制系统的基础,对于理解和使用Git至关重要。

2.2.2 Git的工作原理:快照、暂存区、HEAD等

Git的工作原理基于几个核心概念,包括快照、暂存区(Staging Area)和HEAD等。以下是这些概念的详细解释以及Git的工作原理:

  1. 快照(Snapshots)

    • Git并不存储文件差异或文件变更,而是存储数据的快照。这意味着每当你提交更新时,Git都会对整个项目创建一个完整的副本(或称为“快照”)。如果文件没有改变,Git就不会重新存储这个文件,而是只保留一个链接指向之前存储的文件。
    • 这种快照机制使得Git能够非常高效地处理大项目,因为Git可以很容易地计算出两个快照之间的差异,从而知道需要哪些文件来更新工作目录。
  2. 暂存区(Staging Area)

    • 暂存区是Git中的一个重要部分,它位于工作目录和本地仓库之间。当你对工作目录中的文件进行更改后,这些更改首先会被标记为“已修改”,但它们不会立即被提交到本地仓库。
    • 在提交之前,你需要将这些更改添加到暂存区。这个过程通常通过git add命令完成。添加到暂存区的更改会等待下一次提交。
    • 暂存区的作用是让你有机会在提交之前再次审查你的更改,或者将某些更改拆分到不同的提交中。
  3. HEAD

    • HEAD是Git中的一个特殊指针,它指向当前分支上的最新提交。换句话说,HEAD总是指向当前分支上最近一次提交的快照。
    • 当你执行git commit命令时,Git会创建一个新的提交,并将HEAD指向这个新的提交。这样,HEAD就始终指向最新的提交。
    • 你可以使用git reset命令来移动HEAD的指向,从而撤销最近的提交或更改HEAD所指向的分支。
  4. Git的工作流程

    • 首先,你在工作目录中修改文件。
    • 然后,你使用git add命令将更改添加到暂存区。
    • 接着,你使用git commit命令将暂存区的更改提交到本地仓库,并创建一个新的快照。
    • 最后,你可以使用git push命令将本地仓库的更改推送到远程仓库(如GitHub),以便与其他人共享你的工作成果。

这种工作流程使得Git成为一个非常强大和灵活的工具,可以轻松地管理项目的版本和变更历史。

2.2.3 Git命令基础

Git命令基础涉及到一些用于在Git版本控制系统中执行基本操作的命令。以下是一些常用的Git命令及其简要说明:

1. 初始化仓库
  • git init:在当前目录创建一个新的Git仓库。
2. 克隆仓库
  • git clone <repository-url>:从远程仓库克隆一个项目到本地。
3. 添加文件到暂存区
  • git add <file>:将指定文件添加到暂存区。
  • git add .:将当前目录及其子目录下的所有更改添加到暂存区。
4. 提交更改
  • git commit -m "<message>":将暂存区的更改提交到本地仓库,并附带一条消息。
5. 查看状态
  • git status:查看当前仓库的状态,包括哪些文件已被修改、哪些文件已添加到暂存区等。
6. 查看提交历史
  • git log:查看本地仓库的提交历史。
7. 分支操作
  • git branch:列出本地仓库的所有分支。
  • git branch <branch-name>:创建一个新的分支。
  • git checkout <branch-name>:切换到指定分支。
  • git checkout -b <branch-name>:创建并切换到指定分支(即创建一个新分支并立即切换到该分支)。
  • git merge <branch-name>:将指定分支的更改合并到当前分支。
  • git branch -d <branch-name>:删除指定分支(如果该分支已被合并)。
  • git branch -D <branch-name>:强制删除指定分支(即使该分支还未被合并)。
8. 拉取和推送更改
  • git pull <remote> <branch>:从远程仓库拉取指定分支的更改到本地仓库。
  • git push <remote> <branch>:将本地仓库的指定分支推送到远程仓库。
9. 标签操作
  • git tag <tag-name>:为当前HEAD指向的提交创建一个标签。
  • git tag -l:列出所有标签。
  • git tag -d <tag-name>:删除指定标签。
10. 其他常用命令
  • git remote -v:查看远程仓库的详细信息。
  • git stash:将当前工作区和暂存区的更改保存到堆栈中,以便稍后恢复。
  • git stash pop:从堆栈中恢复最近一次保存的更改,并删除该保存记录。
  • git reset --hard <commit-hash>:将HEAD指针重置到指定提交,并丢弃该提交之后的所有更改。这是一个危险的操作,请谨慎使用。

以上是一些常用的Git命令基础,它们涵盖了Git版本控制系统中的基本操作和概念。随着对Git的深入了解,您可能会发现更多高级命令和用法。

2.3 GitHub与Git的关系

2.3.1 本地Git仓库与远程GitHub仓库的同步

本地Git仓库与远程GitHub仓库的同步通常涉及几个关键步骤。以下是一个基本的同步流程:

  1. 初始化创建本地仓库

    • 打开Git Bash工具,进入到项目代码所在的目录。
    • 运行git init命令来初始化一个新的Git仓库。
    • 根据项目的需求,创建和编辑.gitignore文件,用于忽略不需要提交到Git仓库的文件或文件夹。使用git add .gitignore命令将.gitignore文件添加到暂存区,并使用git commit -m'添加.gitignore文件'命令提交到本地仓库。
    • 根据需要,创建和编辑README.md文件,为项目提供说明和文档。
  2. 添加文件到暂存区并提交

    • 除了.gitignore忽略的文件和文件夹外,使用git add .命令将剩余的所有文件和文件夹添加到暂存区。
    • 运行git status命令来查看工作目录的状态,确保所有需要提交的文件都已被正确添加。
    • 使用git commit -m "提交信息"命令将暂存区的更改提交到本地仓库,其中“提交信息”是对这次更改的简要描述。
  3. 在GitHub上创建远程仓库

    • 访问GitHub网站并登录你的账户。
    • 点击右上角的“+”按钮,选择“New repository”来创建一个新的仓库。
    • 为你的仓库命名,设置其他选项(如是否公开、是否包含README文件等),然后点击“Create repository”按钮。
  4. 将本地仓库与远程仓库关联

    • 在本地仓库中,使用git remote add origin <远程仓库URL>命令将本地仓库与GitHub上的远程仓库关联起来。其中,“origin”是远程仓库的默认名称,而“<远程仓库URL>”是你在GitHub上创建的仓库的URL。
  5. 推送本地仓库的内容到远程仓库

    • 运行git push -u origin <分支名>命令将本地仓库的内容推送到远程仓库。其中,“origin”是远程仓库的名称,“<分支名>”是你要推送的分支的名称(通常是“master”或“main”,取决于你的项目设置)。“-u”参数用于设置上游(upstream)仓库,以便在后续的推送或拉取操作中可以省略仓库名和分支名。
  6. 从远程仓库拉取最新的代码

    • 当其他人在远程仓库上提交了新的代码时,你可以使用git pull origin <分支名>命令从远程仓库拉取最新的代码到本地仓库。这将自动合并远程仓库和本地仓库的代码,并解决任何可能的冲突。

通过以上步骤,你就可以在本地Git仓库和远程GitHub仓库之间实现同步了。记得在每次进行代码更改时都提交你的更改,并定期从远程仓库拉取最新的代码,以确保你的本地仓库始终与远程仓库保持同步。

2.3.2 协作开发流程

GitHub与Git在协作开发流程中扮演着重要的角色,它们共同支持着高效的代码共享、版本控制以及团队协作。以下是基于GitHub和Git的协作开发流程:

  1. 创建GitHub仓库
    • 团队成员中的一人(通常是项目负责人或核心开发者)在GitHub上创建一个新的仓库来托管项目代码。这个仓库可以设置为公开或私有,根据项目的性质和需求来决定。
  2. 克隆仓库到本地
    • 每个团队成员在本地计算机上使用Git命令(如git clone)将GitHub上的仓库克隆到本地。这样,每个人都可以在本地进行代码修改和版本控制。
  3. 在本地进行开发
    • 团队成员在本地使用Git进行代码的开发和修改。Git允许开发者创建新的分支(branches)来隔离不同的功能或修复工作,这有助于保持主分支(通常是mastermain分支)的稳定性和可维护性。
  4. 提交代码到本地仓库
    • 当开发者完成一部分工作后,可以使用Git命令(如git addgit commit)将修改后的代码提交到本地仓库。每次提交都应该包含一个简短的描述,说明所做的更改和原因。
  5. 推送代码到GitHub
    • 开发者可以使用Git命令(如git push)将本地仓库的更改推送到GitHub上的远程仓库。这通常是在完成一个功能或修复一个错误后进行的,以便其他团队成员可以看到和评估这些更改。
  6. 创建Pull Request
    • 当开发者想要将他们的代码合并到主分支时,他们可以在GitHub上创建一个Pull Request(PR)。PR是一个请求,要求将某个分支的代码合并到另一个分支(通常是主分支)。PR会触发一个代码审查流程,让其他团队成员有机会查看和评估这些更改。
  7. 代码审查和讨论
    • 在Pull Request被创建后,其他团队成员可以对这些更改进行审查,并在PR页面上提供反馈和建议。开发者可以根据这些反馈进行必要的修改,并与团队成员进行讨论和协商,以达成共识。
  8. 合并Pull Request
    • 一旦Pull Request通过了代码审查并得到了足够的支持,负责合并的团队成员(通常是项目负责人或核心开发者)就可以将其合并到主分支。这通常是通过点击GitHub上的“Merge”按钮来完成的。合并后,这些更改就会成为项目代码库的一部分,并可供所有团队成员使用。
  9. 持续集成和持续部署(CI/CD)
    • 在一些项目中,还可以使用持续集成和持续部署工具(如Jenkins、Travis CI等)来自动构建、测试和部署项目。这些工具可以与GitHub集成,以便在每次Pull Request被合并时自动触发构建和测试流程。如果构建或测试失败,这些工具可以立即通知团队成员,以便及时修复问题。

通过以上流程,GitHub和Git共同支持了一个高效的协作开发环境,使团队成员能够轻松地共享代码、管理版本并进行有效的协作。

三、GitHub的应用

3.1 个人项目管理

        详见《GitHub的原理及应用详解(三)

3.2 团队协作

        详见《GitHub的原理及应用详解(三)

3.3 开源社区参与

        详见《GitHub的原理及应用详解(四)

3.4 自动化与持续集成

        详见《GitHub的原理及应用详解(四)

3.5 企业级应用

        详见《GitHub的原理及应用详解(四)

四、GitHub的高级特性

        详见《GitHub的原理及应用详解(五)

五、GitHub的最佳实践

        详见《GitHub的原理及应用详解(六)

六、结论和展望

        详见《GitHub的原理及应用详解(六)

七、结语

        文章至此,已接近尾声!希望此文能够对大家有所启发和帮助。同时,感谢大家的耐心阅读和对本文档的信任。在未来的技术学习和工作中,期待与各位大佬共同进步,共同探索新的技术前沿。最后,再次感谢各位的支持和关注。您的支持是作者创作的最大动力,如果您觉得这篇文章对您有所帮助,请分享给身边的朋友和同事!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

夏天晚上热,早上凉怎么办?

温差太大容易引起感冒 1.定个大概3点的闹钟&#xff0c;起来盖被子。有些土豪可以开空调&#xff0c;我这个咸鱼没有空调。 2.空调调到合适的温度&#xff0c;比如20几度。

Redisson的setConnectionMinimumIdleSize配置,设置小一点有什么影响?

设置最小空闲连接数 (connectionMinimumIdleSize) 是影响 RedissonClient 性能和资源利用的一个关键配置。让我们详细了解一下这个参数的作用及其影响。 什么是 connectionMinimumIdleSize&#xff1f; connectionMinimumIdleSize 参数用于定义连接池中保持的最小空闲连接数。…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十一)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 18 节&#xff09; P18《17.ArkUI-状态管理Observed 和 ObjectLink》 第一件事&#xff1a;嵌套对象的类型上加上 Observed 装饰器…

基于网络爬虫技术的网络新闻分析(四)

目录 4.2 系统异常处理 4.2.1 爬虫异常总体概况 4.2.2 爬虫访问网页被拒绝 5 软件测试 5.1 白盒测试 5.1.1 爬虫系统测试结果 5.1.2 中文分词系统测试结果 5.1.3 中文文章相似度匹配系统测试结果 5.1.4 相似新闻趋势展示系统测试结果 5.2 黑盒测试 5.2.1 爬虫系统测…

shell编程-结构化命令

1、if-then语句 如果command命令执行成功&#xff08;退出状态码为0&#xff09;&#xff0c;then部分的命令就会执行 if comand then commands fi 或 if comand: then commands fi 例如&#xff1a; #!/bin/bash if date who then echo this is test …

2024电工杯数学建模 - 案例:最短时间生产计划安排

# 前言 2024电工杯(中国电机工程学会杯)数学建模思路解析 最新思路更新(看最新发布的文章即可): https://blog.csdn.net/dc_sinor/article/details/138726153 最短时间生产计划模型 该模型出现在好几个竞赛赛题上&#xff0c;预测2022今年国赛也会与该模型相关。 1 模型描…

CoShNet:使用复数改进神经网络

使用复数改进神经网络 文章目录 一、说明二、了解卷积神经网络三、进入混合神经网络四、令人惊叹的 CoSh 网络五、复杂函数的神奇性质六、相位一致性七、结论 一、说明 本文题为“CoShNet&#xff1a;使用Shearlets的混合复杂值神经网络”&#xff0c;提出了在混合神经网络中使…

深入理解SVM和浅层机器学习算法的训练机制

深入理解SVM和浅层机器学习算法的训练机制支持向量机&#xff08;SVM&#xff09;的训练过程SVM的基本概念SVM的损失函数训练方法 浅层机器学习算法的训练机制决策树K-最近邻&#xff08;K-NN&#xff09;朴素贝叶斯 结论 深入理解SVM和浅层机器学习算法的训练机制 在探讨浅层…

nrf52832自定义蓝牙名字过长,广播显示不全

自定义蓝牙名字过长&#xff0c;广播显示不全 原因:nrf52832默认使用蓝牙4.x的广播&#xff0c;它的广播包数据只有32byte数据&#xff0c;当广播已经包含足够多的数据的时候&#xff0c;广播每次过长就会显示部分名称&#xff0c;即便你选择"BLE_ADVDATA_FULL_NAME"…

Python学习---基于多任务协程的并发下载器案例

目标&#xff1a;使用协程实现网络图片的下载&#xff08;适合网络io&#xff09; 多进程&#xff1a; 密集CPU任务&#xff0c;需要充分使用多核CPU资源&#xff08;服务器&#xff0c;大量的并行计算&#xff09;的时候&#xff0c;用多进程。 缺陷&#xff1a;多个进程之间通…

Python基础学习笔记(六)——列表

目录 一维列表1. 索引的查询与返回2. 切片3. 添加元素4. 删除元素5. 更改元素6. 排序7. 生成式 一维列表 列表&#xff0c;也称数组&#xff0c;是一种有序、可变、允许重复元素的组合数据结构&#xff0c;属于可变序列&#xff0c;由方括号[]内、用逗号分隔的一组元素组成。 列…

【Clickhouse】DB::Exception: Table is in readonly mode问题解决

1. 问题描述 公司电力检修&#xff0c;机房断电再上电之后clickhouse的一张表出现了只读现象 2024.05.20 16:58:08.702472 [ 173655 ] {17C25AD8068BBE9A} <Error> executeQuery: Code: 242, e.displayText() DB::Exception: Table is in readonly mode (version 20.5…

展现金融科技前沿力量,ATFX于哥伦比亚金融博览会绽放光彩

不到半个月的时间里&#xff0c;高光时刻再度降临ATFX。而这一次&#xff0c;是ATFX不曾拥有的桂冠—“全球最佳在线经纪商”(Best Global Online Broker)。2024年5月15日至16日&#xff0c;拉丁美洲首屈一指的金融盛会—2024年哥伦比亚金融博览会(Money Expo Colombia 2024) 于…

【华为OD机试-C卷D卷-200分】文本统计分析(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 有一个文件,包含以一定规则写作的文本,请统计文件中包含的文本数量。 规则如下: 文本以 ";" 分隔,最后一条可以没有 ";" ,但空文本不能算…

数据对大模型预训练效果的影响

文章目录 数据数量的影响数据质量的影响数据集污染数据预处理实践 在训练大语言模型的过程中&#xff0c;预训练数据的质量对模型能力的影响至关重要。已有的研究表明&#xff0c;基于含有噪音、有毒和重复数据的低质量语料库进行预训练&#xff0c;会严重损害模型性能。 数据…

hdfs机器下线维修

HDFS&#xff08;Hadoop Distributed File System&#xff09;是Hadoop分布式文件系统&#xff0c;它设计用来跨多个物理服务器存储大量数据。当HDFS集群中的某个机器需要下线维修时&#xff0c;需要谨慎处理以避免数据丢失或服务中断。以下是处理HDFS机器下线的步骤&#xff1…

[C][C运算][取模/取余运算][隐式类型转换][算术转换]详细讲解

目录 1.取模/取余运算1.取整2.取模 2.隐式类型转换3.算术转换 1.取模/取余运算 1.取整 C语言默认向0取整 – trunc()同作用floor() -> 向-∞取整ceil() -> 向∞取整round() -> 四舍五入 2.取模 定义&#xff1a;如果a和d是两个自然数&#xff0c;d非零&#xff0c…

AI智能体|使用扣子Coze基于IDE创建自定义插件

大家好&#xff0c;我是无界生长。 在使用Coze的过程中&#xff0c;有些个性化场景无法通过插件商店已有的插件满足&#xff0c;这个时候就需要通过自定义插件的方式来实现业务需求。下面将通过一个实际案例来简单介绍下如何使用Coze基于IDE创建自定义插件&#xff0c;完成在Co…

Godot游戏引擎有哪些优势

哈喽呀&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;众所周知在当今游戏开发领域&#xff0c;各种游戏引擎如雨后春笋般涌现&#xff0c;为开发者提供了丰富的选择。而在这些众多的选择中&#xff0c;Godot游戏引擎以其独特的特性和开放源代码的优势&…

java.util.ConcurrentModificationException异常分析及解决

问题描述 有一个RecycleView视图组件&#xff0c;数据变更得时候进行了增加和删除操作&#xff0c;频繁触发 增加、删除数据得操作&#xff0c;低概率出现此问题&#xff0c;代码片段无法展示&#xff0c;可以语言描述一下代码片段 recycleview使用了adapter来展示数据adapte…