Git
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地管理开发项目。它的读音为/gɪt/。
Git的基本使用包括克隆、本地仓库、分支、提交、拉取、合并、推送等。其中,远程仓库是指我们代码存储在服务器的地方,这个仓库是我们整个团队中所有人都可以访问的地方。克隆是从远程仓库克隆到本地的过程。
Git的优点在于其分布式特性,这使得团队成员可以独立工作,同时又能保持代码的一致性。此外,Git还提供了版本控制、分支管理等功能,可以帮助开发者更好地管理和维护代码。
git教程:
https://www.runoob.com/git/git-tutorial.html
权限
以Gitlab为例,Gitlab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner。
Guest:可以创建issue、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
Developer:可以克隆代码、开发、提交、push,RD可以赋予这个权限
Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限
Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限
Gitlab中的组和项目有三种访问权限:Private、Internal、Public。
Private:只有组成员才能看到
Internal:只要登录的用户就能看到
Public:所有人都能看到
用户
在获取了代码权限后,可以设置ssh key免密访问或提交代码。
这里只演示最简单的ssh key生成方法。
ssh-keygen
# 有几项回车确认
# 查看pub key
cat ~/.ssh/id_rsa.pub
打开Settings-SSH Keys
将文件id_rsa.pub的内容复制到key文本框中即可。
获取代码
打开项目页面,复制网页链接。
运行命令拷贝代码
cd {XXX}
git clone {url}
通常主分支(默认分支)为master或者main。
Git开发流程
首先,任何公共项目不允许修改主分支代码,只能通过在网页上发起Merge Request,将开发分支上的修改合并到主分支上
推荐VSCode开发插件:
-
GitGraph:查看分支、每次提交的修改内容
-
GitLens:在代码编辑器里显示每一行代码的修改信息。其gitgraph功能需要付费,但是个人感觉没有GitGraph好用。
修改代码
创建分支
修改代码首先需要切换到新的分支,用于保存本次开发任务的所有修改。分支命名通常{开发者id}/{分支名},如lambda/nerf,分支名最好体现本次开发任务要实现的功能,开发者id可以使用名字首字母,如lambda/multiple_nerf。
git checkout -b lambda/nerf
提交修改
在README.md里做了一些修改。
在VSCode的版本控制栏里可以看到修改信息。
提交修改操作建议使用命令而不使用GUI,防止手滑误操作。每个commit的说明需要反应本次修改的内容,如果是修复类的修改,前缀最好加Fix
# 将修改的文件添加到缓冲区
git add {文件路径}
# 将所有修改添加到缓冲区
git add .
# 将缓冲区的修改提交到当前分支,生成一次提交
git commit -m "本次修改说明"
撤回修改
如果对刚刚提交的代码不满意,可以将上一次修改撤回到缓冲区。
git reset --soft HEAD^
推送代码
开发完毕或者临时修改的代码,可以推送到服务器上。
git push origin {分支名}
合并代码
合并代码是将当前分支的修改合并到其他分支上,通常是合并到主分支上。
在开发期间,主分支可能会有修改,这些修改可能跟自己开发的内容有冲突,比如修改了同一个函数,就会产生冲突,产生冲突后,通过查看git记录找到冲突的原因,及时沟通,讨论好最终版本,并修改代码解决冲突。
# 拉取最新的代码
git checkout main
git pull origin main
# 更新当前分支的代码,确保跟主分支同步
# 同时解决冲突
git checkout {当前分支}
git rebase main
# 如果出现冲突,会提示失败,并且在缓冲区里出现冲突文件。
# 推送最新的代码到远程仓库
git push origin {当前分支}
Merge Request需要在网页发起。如下图,点击New Merge Request。
在Reviewer里选择本项目/本算法的相关同事,以及本项目负责人,在代码Review结束后,通过合并请求。
快速上手版
# 拉取代码
git clone {代码链接}
# 创建并切换到新分支,以lambda/dev为例
git checkout -b ld/dev
# ---- 开发... ------
# 提交修改到缓冲区
git add {修改的文件}
# 提交所有修改到缓冲区
git add .
# 提交缓冲区的修改到当前分支
git commit -m "修改说明"
# 推送代码到远程服务器
git push origin lambda/dev
# 合并代码,主要是更新主分支代码,解决冲突
git checkout main
git pull origin main
git checkout lambda/dev
git rebase main
# --- 解决冲突... ---
# 推送修改到远程
git push origin lambda/dev -f
# Merge Request在网页端发起