所有tag为书生大模型的文档,连同本文档在内,为书生大模型实战营训练内容,文档中的内容并不局限于实战营本身,但算力平台均首选上海AI实验室开发的云端集成开发环境InternStudio,开发手册和InternStudio算力平台的相关内容可以点击链接跳转。
1.Git 是什么?
Git是一个开源的分布式版本管理控制系统。
如果想要和别人一起合作开发某个项目,最传统的策略就是打包压缩然后发送给对方,然后通过上传到网盘或者上传到QQ,又或者通过邮箱传输。但是这样的方式存在很多问题,比如:
- 效率低下,每次都需要压缩,上传,下载,还要考虑网络问题。
- 无法追踪历史,无法追踪修改,无法追踪谁做了什么修改。
- 无法协作开发,无法多人同时开发。
这时就需要能解决以上问题的一个工具而且他需要满足以下的功能:
- 支持多人同时开发, 保证高效有序
- 有一个网络平台能帮我们同步工程开发进度
- 差分增量式更新工程代码, 减少上传下载流量
- 支持历史追踪的版本管理, 便于回溯
Git就是为了解决这些问题而生的,它可以有效、高速的处理从很小到非常大的项目版本管理。 Git的诞生离不开Linux社区的努力,它是开源的,而且是免费的。它支持多种操作系统,包括 Linux、Unix、Mac OS X、Windows。
2.Git中的一些基本概念
2.1 工作区、暂存区和仓库区
- 工作区(Working Directory): 当在本地创建一个 Git 项目,或者从 GitHub 上 clone 代码到本地后,项目所在的这个目录就是“工作区”。这里是对项目文件进行编辑和使用的地方。
- 暂存区(Staging Area): 暂存区是Git中独有的一个概念,位于
.git目录中的一个索引文件,记录了下一次提交时将要存入仓库区的文件列表信息。使用git add指令可以将工作区的改动放入暂存区。 - 仓库区/本地仓库(Repository):在项目目录中,
.git隐藏目录不属于工作区,而是Git的版本仓库。这个仓库区包含了所有历史版本的完整信息,是Git项目的“本体”。
2.2 文件状态
文件在Git工作区中的状态可以是:
- 已跟踪:文件已被纳入版本控制,根据其是否被修改,可以进一步分为未修改(Unmodified)、已修改(Modified)或已暂存(Staged)。
- 未跟踪:文件存在于工作目录中,但还没被纳入版本控制,也未处于暂存状态。
| 状态 | 未跟踪Untrack | 未修改Unmodified | 已修改Modified | 已暂存Staged |
|---|---|---|---|---|
| 说明 | "即新建的文件,并未被git所管理" | "文件的内容没有写入修改,已经被git管理" | "文件的内容被写入修改,已经被git管理" | "文件的内容暂存,已经被git管理" |
2.3 分支
分支是Git的一大特性,支持轻量级的分支创建和切换。Git鼓励频繁使用分支和合并,使得并行开发和错误修正更为高效。
2.4 主要功能
-
代码历史记录跟踪
Git 记录每一次代码提交,允许用户查看项目的历史版本和变更记录(最重要的功能),从而理解每个阶段的开发细节。
-
团队协作
支持多人同时对同一项目工作,提供了合并、分支和版本控制的功能,以确保多人协作的效率和代码的整合性。
-
变更审查
允许开发者查看代码变更的具体内容,了解谁在何时做了哪些修改,这对于代码审查和质量控制至关重要。
-
实现机制
| 特性 | 描述 |
|---|---|
| 分布式架构 | 与集中式版本控制系统不同,Git 在每个开发者的机器上都存有完整的代码库副本,包括完整的历史记录。这种分布式的特性增强了数据的安全性和获取效率。 |
| 分支管理 | Git 的分支管理功能非常灵活,支持无缝切换到不同的开发线路(分支),并允许独立开发、测试新功能,最终通过合并操作将这些功能稳定地集成到主项目中。 |
| 快照系统 | Git通过快照而非差异比较来管理数据。每次提交更新时,Git实际上是在存储一个项目所有文件的快照。如果文件没有变化,Git只是简单地链接到之前存储的文件快照。 |
3. Git 平台介绍
3.1 GitHub
是全球最大的代码托管平台之一,拥有丰富的开源项目和活跃的开发者社区。它提供了版本控制、项目管理、协作开发等功能,并支持多种编程语言。
3.2 GitLab
一个自托管或基于云的平台,提供了完整的DevOps工具链,包括代码托管、持续集成/持续部署(CI/CD)、问题跟踪等。
3.3 Gitee
国内的代码托管平台,提供了代码托管、项目管理、协作开发等功能,对国内开发者来说,访问速度可能更快,也更符合国内的使用习惯。
4. Git下载与验证配置
4.1 下载Git
Windows:
- 下载并安装适合您 Windows 版本的安装程序:下载地址
- 按照安装向导完成安装。(默认设置安装即可)
- 打开终端(win+r→cmd),输入指令
git --version检查是否安装成功。

Linux:
-
打开终端,输入指令
sudo apt-get install git #安装 Git。 sudo apt-get update sudo apt-get upgrade -
输入指令
git --version检查是否安装成功。
4.2 配置Git
Git的配置可以选用全局设置和本地设置。
全局设置:这些设置影响你在该系统上所有没有明确指定其他用户名和电子邮件的Git仓库。这是设置默认用户名和电子邮件的好方法。
本地设置:这些设置仅适用于特定的Git仓库。这对于你需要在不同项目中使用不同身份时很有用,例如区分个人和工作项目。
全局设置 (要是私人电脑可以直接用全局设置)
打开终端或命令提示符,并输入以下命令来设置全局用户名和电子邮件地址:
git config --global user.name "your name"
git config --global user.email "your.email@example.com"
这里的 "Your Name" 和 "your.email@example.com" 应替换为你自己的姓名和电子邮件。
本地设置
首先,确保你当前处于你想要配置的Git仓库的目录中。
然后,输入以下命令来仅为该仓库设置用户名和电子邮件地址:
git config --local user.name "Your Name"
git config --local user.email "your.email@example.com"
同样,替换 "Your Name" 和 "your.email@example.com" 为该特定项目中使用的姓名和电子邮件。
4.3 验证Git配置
验证这些设置以确保它们被正确应用。
-
查看全局配置:
git config --global --list -
查看仓库配置:
git config --local --list -
永久保存信息至本地:
# 设置 Git自动记录密码(token),从而无需在每次 pull 或 push 时输入 # 注意:信息会以明文存储在本地,需考虑安全性 git config --global credential.helper store -
查看特定配置项:
git config user.name git config user.email
5.Git的操作
5.1 Git基础指令
Git最基础的操作主要有四个,分别为添(Add),提(Commit),拉(Pull),推(Push)。
- 添(Add)
- 命令:
git add <文件名>或git add . - 作用:将修改过的文件添加到本地暂存区(Staging Area)。这一步是准备阶段,可以选择性地添加文件,决定哪些修改应该被包括在即将进行的提交中。
- 命令:
- 提(Commit)
- 命令:
git commit -m '描述信息' - 作用:将暂存区中的更改提交到本地仓库。这一步是将更改正式记录下来,每次提交都应附带一个清晰的描述信息,说明这次提交的目的或所解决的问题。
- 命令:
- 拉(Pull)
- 命令:
git pull - 作用:从远程仓库拉取最新的内容到本地仓库,并自动尝试合并到当前分支。这一步是同步的重要环节,确保当前的工作基于最新的项目状态进行。在多人协作中,定期拉取可以避免将来的合并冲突。
- 命令:
- 推(Push)
- 命令:
git push - 作用:将本地仓库的更改推送到远程仓库。这一步是共享你的工作成果,让团队成员看到你的贡献。
- 命令:
通常来说,假设你在GitHub上看见了一个很厉害的项目,你就可以选择先将其Pull到本地,对其中的文件做修改,随后Add并Commit。当你觉得一切完成了以后,就是将它Push到自己的远程仓库。
5.2 Git其他指令
一些常用指令
git config # 配置用户信息和偏好设置
git init # 初始化一个新的 Git 仓库
git clone # 克隆一个远程仓库到本地
git status # 查看仓库当前的状态,显示有变更的文件
git add # 将文件更改添加到暂存区
git commit # 提交暂存区到仓库区
git branch # 列出、创建或删除分支
git checkout # 切换分支或恢复工作树文件
git merge # 合并两个或更多的开发历史
git pull # 从另一仓库获取并合并本地的版本
git push # 更新远程引用和相关的对象
git remote # 管理跟踪远程仓库的命令
git fetch # 从远程仓库获取数据到本地仓库,但不自动合并
进阶指令
git stash # 暂存当前工作目录的修改,以便可以切换分支 |
git cherry-pick #选择一个提交,将其作为新的提交引入 |
git rebase # 将提交从一个分支移动到另一个分支 |
git reset # 重设当前 HEAD 到指定状态,可选修改工作区和暂存区 |
git revert # 通过创建一个新的提交来撤销之前的提交 |
git mv # 移动或重命名一个文件、目录或符号链接,并自动更新索引 |
git rm # 从工作区和索引中删除文件 |
每个指令都有其特定的用途和场景,详细的使用方法和参数可以通过命令行的帮助文档(git command -h,例如 git pull -h)来获取更多信息。
5.3 Git Flow
在5.1和5.2中提到的所有指令几乎都是为了Git Flow服务的。
在使用Git维护多人项目的过程中,如果没有清晰流程和规划,否则,每个人都提交一堆杂乱无章的 commit,项目很快就会变得难以协调和维护。Git版本管理同样需要一个清晰的流程和规范,也就是Git Flow。
各个厂商在使用Git时的Git Flow可能并不完全相同,此处仅抛砖引玉,不会详细叙述完成各个操作的指令是哪些。如果想要练习Git Glow的各项内容(也就是练习5.1和5.2中提到的各个指令),推荐Learn Git Branching这个网站,基本上过两遍就能理解和使用了。
5.3.1 Master/Production分支
也就是经常使用的Master分支,这个分支最近发布到生产环境的代码,最近发布Release, 这个分支只能从其他分支合并,不能在这个分支直接修改。
所有在Master分支上的Commit应该打上Tag(v0.1/v0.2等等),一般情况下Master不存在Commit,Develop分支基于Master分支创建。

5.3.2 Feature分支
这个分支主要是用来开发一个新的功能,一旦开发完成,就要合并回Develop分支进入下一个Release。

5.3.3 Release
当你需要一个发布一个新Release的时候,可以基于Develop分支创建一个Release分支,可以在这个Release分支上测试,修改Bug等。同时,其它开发人员可以基于 Develop 分支新建Feature(记住:一旦打了Release 分支之后不要从Develop分支上合并新的改动到Release分支)发布Release分支时,合并Release到Master和Develop,同时在Master分支上打个Tag记住Release版本号,然后可以选择删除Release分支了。

5.3.4 Hotfix
当在Master上发现新的Bug时候,需要创建一个Hotfix,完成Hotfix后,合并回 Master和Develop分支,所以Hotfix的改动会进入下一个Release。

5.3.5 约定式提交
约定式提交规范是一种基于提交信息的轻量级约定。它提供了一组简单规则来创建清晰的提交历史;这更有利于编写自动化工具。通过在提交信息中描述功能、修复和破坏性变更,使这种惯例与SemVer相互对应。
6.GitHub的实践
6.1 Fork项目
本文档为书生大模型实战营训练内容,因此将采用该GitHub项目做演示。
将本项目直接fork到自己的账号下,这样就可以直接在自己的账号下进行修改和提交。

注意,不要勾选“只克隆当前分支”。

这样,此时这个项目就会原样出现在自己账号下的仓库:

然后,可以在VS Code中Clone到本地。注意如果是自己的仓库要更改用户名。
git clone https://github.com/ArtemisYi/Tutorial.git

现在可以创建切换到目标分支了:
cd Tutorial/
git branch -a
git checkout -b class origin/class

创建一个新的分支,添加一个自我介绍的文件进去(5003是本人的ID),然后提交:
git checkout -b class_5003
git add .
git commit -m "add git_camp4_5003_introduction"

推送分支到远程仓库
git push origin class_5003

填写相关title,方便审核。然后点击“Create pull request”

最后等待审核通过即可。
Comments
评论
Loading comments...
登录后可以评论。 Login