关于Git:团队协作和版本控制的最佳实践 | 青训营

107 阅读6分钟

这是我参与「第六届青训营 -后端场」笔记创作活动写下的第8篇笔记。

1.Git的介绍

Git 是一个分布式版本控制系统,用于跟踪文件和目录的变化,并协助多人协作开发项目。它是由Linus Torvalds创建的,在开源社区得到了广泛的应用和支持。

Git 的好处包括:

  • 分布式架构:每个开发者都拥有完整的代码历史记录和仓库拷贝,可以在本地独立工作,无需依赖网络连接。
  • 高效的分支管理:Git 的分支管理能力非常强大,支持高效的并行开发和特性分支开发模型。
  • 快速和轻量级:Git 的设计目标之一是速度和占用空间的优化,使得操作快速且占用资源较少。
  • 强大的版本控制功能:Git 可以跟踪文件和目录的每个变化,并记录详细的历史记录,方便查看、恢复和比较。
  • 良好的兼容性和社区支持:Git 已经成为开源社区的事实标准,有广泛的支持和丰富的生态系统。

2.Git的下载

  • 进入Git官网
 https://git-scm.com/

选择适合自己系统的版本,进行下载

image.png

2.1设置用户签名

 git config -global user.name 用户名
 git config -global user.email 邮箱

Git首次安装时必须设置用户签名,否则无法提交代码。

3.使用Git客户端

 git --version
 git --help

4.Git 的四个工作区域

Git 有四个工作区域:工作目录(Working Directory)、暂存区(Staging Area/Index)、本地仓库(Local Repository)和远程仓库(Remote Repository)。

4.1工作目录

工作目录是你在本地机器上创建和修改文件的地方。当你克隆或者从远程仓库拉取代码时,它会把代码保存在工作目录中。你可以在这个目录下进行修改、添加、删除和重命名文件。

4.2暂存区

暂存区是一个缓冲区域,用于暂时存放你想要提交到版本控制的更改,它位于本地仓库内。在提交之前,你需要使用 git add 命令将工作目录中的修改添加到暂存区。通过暂存区,你可以选择性地将特定的更改提交到版本控制系统。

4.3本地仓库

本地仓库是存储项目的完整历史记录的地方。当你使用 git commit 命令时,暂存区中的更改会被提交到本地仓库中,并生成一个唯一的提交记录。本地仓库包含了完整的版本历史和元数据,你可以使用各种 Git 命令来查看、回溯和管理提交记录。

4.4远程仓库

远程仓库是存储在网络上的共享版本库。它可以位于本地节点之外,也可以托管在像 GitHub、GitLab 或 Bitbucket 等服务提供商的服务器上。远程仓库允许多个开发者协同工作,他们可以推送和拉取代码来与团队共享更改。

5.Git文件的四种状态

git的工作流程简要说明:

  • 在工作目录中添加、修改

  • 将需要进行版本管理的文件放入暂存区域

  • 将暂存区域的文件提交到git仓库

    因此,git文件一般有三种状态,分别为:已修改、已暂存、已提交。

6.Git项目版本控制

以下是git版本切换的一些命令:

1.查看版本信息

 reflog或log

2.切换版本,包括将低版本切换为高版本

 git reset --hard 版本号

3.查看文件内容

 cat filename

4.查看.git下的refs目录

 .git/refs/heads/master

Git合并分支

  • 查看分支:git branch
  • 创建分支:git branch name
  • 切换分支:git checkout name
  • 在当前分支上修改文件 vim filename
  • 在当前分支提交:git commit -m 'name first commit'
  • 切换到主分支:git checkout master
  • 创建以及切换分支:git checkout -b name
  • 合并某个分支到当前分支:git merge name
  • 删除分支:git branch -d name

解决Git合并分支冲突

在 Git 中,当我尝试合并(merge)两个分支时,发现两个分支上的相同文件有不同的修改就会发生冲突。解决冲突步骤如下:

  1. 查找冲突:首先,可以使用 git status 命令查看工作目录中的冲突文件列表。Git 会用特殊标记标识出冲突的部分。
  2. 手动解决冲突:打开冲突文件,会看到像这样的标记:
 <<<<<<< HEAD
 代码在当前分支的修改
 =======
 代码在合并分支的修改
 >>>>>>> branch_name

<<<<<<< HEAD======= 是当前分支的内容,=======>>>>>>> branch_name 是合并分支的内容。

  1. 修改冲突:根据需要,手动编辑冲突文件以解决冲突。可以选择保留其中一个分支的更改,或者将两个分支的更改合并在一起。删除特殊标记 <<<<<<< HEAD=======>>>>>>> branch_name,并将文件保存。
  2. 添加解决后的文件:使用 git add 命令将解决冲突后的文件添加到暂存区。
  3. 完成合并提交:接下来,使用 git commit 命令完成合并提交。Git 会自动生成一个默认的合并提交消息,可以保留它,也可以编辑成更有意义的消息。
  4. 继续合并或推送:如果还有其他冲突需要解决,则重复上述步骤,直到所有冲突都得到解决。一旦所有冲突解决完毕,可以继续完成合并操作或使用 git push 命令将合并后的分支推送到远程仓库。

具体操作示例如下:

 //1.在当前主分支修改文件
 ​
 vim filename
 ​
 //2.提交文件
 ​
 git add .
 ​
 git commit -m 'modifiy by master' filename
 ​
 //3.切换分支
 ​
 git checkout bug-fix
 ​
 //4.修改同一个文件
 ​
 vim filename
 ​
 //5.提交文件
 ​
 git add.
 ​
 git commit -m 'modifiy by master' filename
 ​
 //6.切换到主分支
 ​
 git checkout master
 ​
 //7.合并分支
 ​
 git merge hot-fix
 ​
 //8.手动修改文件
 ​
 vim filename
 ​
 //9.再次添加到暂存区
 ​
 git add .
 ​
 //10.再次提交
 ​
 git commit -m 'merge commit'

Git团队协作

image.png

首先项目队长先写了一个项目,他把它从本地库推送(push)到远程仓库,小组其他的成员从远程库里clone到自己的本地库,小组成员完成一些代码后又可以通过push操作将代码传进远程库参与团队协作。

同理,其他的成员同样可以从clone以及push进远程库中。

此外,当他人提交了代码后需要pull操作拉取进本地库再进行push操作。

Git跨团队协作

image.png

首先有一个开源软件,例如从a团队有一个项目从本地库push进远程库

b团队通过fork操作拷贝了这个项目到远程库,再clone到自己的本地库

经过团队的修改push回远程库的最终版本,发送pull request请求经过a团队的审核,审核通过后a会merge进自己的远程库中


参考资料:

Git 基本使用方式

golang入门到项目实战