Git: 团队协同之-流程操作

315 阅读4分钟

前言

针对于中大型企业,内部一般都会制定一份关于Git代码管理的使用规范和流程。这样做的目的也是为了更好地维护代码和开发人员之间的相互协作,但同时在代码提交、审查、合并方面就需要更多的时间成本。而在小企业的话,就是更追求效率至上,因此我接下来所总结的Fork公共仓库对于小公司而言可选择性参考。

工作流

首次开发工作流

可参考以下步骤

  1. 登录github到对应的公共仓库项目fork个人仓库 
  2. 下载 git clone xx.git
  3. 添加公共仓库代码地址,用于获取最新代码 git remote add main git@xx.git
  4. 设置不能直接推送代码到公共仓库 git remote set-url --push main no-push
  5. 创建分支 git checkout -b 1105-device-add
  6. 在分支开发
  7. 提交到本地仓库 git add git commit
  8. 推送到个人仓库 git push origin HEAD
  9. 在github上提交合并请求Merge Request

方便理解,我大致绘画出以下流程图

image.png

  1. 在之前的分支(如上面的 1105-device-add )基础上创建分支(如 1105-device-delete )后开发
  2. 开发完毕后,推送到个人远程仓库
  3. 等待之前的分支合并后,再提合并请求

不相关功能的后续开发(另建分支)

  1. 切到master分支 git checkout master
  2. 提取最新代码 git pull main master
  3. 创建新分支 git checkout -b 1105-order-add
  4. 新分支上开发

补充说明Fork

Fork 指的就是把在别人盘子 (仓库) 里的菜 (代码) 叉 (Fork) 到自己盘子里。

在实际开发中,我们经常会用到这种方式来进行协同开发。首先一个项目会有一个主仓库,由专人进行维护,每个开发者将主仓库的代码 fork 到自己的远程仓库,然后再将代码 clone 到本地进行开发。开发者在本地新建一个功能分支,在该分支上进行开发,开发完毕后将该分支上的改动 push 到自己的远程仓库中,然后发起一个 pull request (简称 PR) 到主仓库。维护者看到后,会审查 (review) 你的代码,当他觉得没有问题后就会将其合并 (merge) 到主仓库的主分支上

实际案例

fork工作的流程

下面以AVBlog为例来说明:

1. 点击smartyuge/ AVBlog项目的fork

image.png

2. 自己的github中就会出现该项目LuckeX / AVBlog

image.png

3. 使用git clone把自己仓库中的项目clone到本地

4. 在本地添加upstream的地址(主仓库的远程地址)

使用 git remote add upstream [url] ,其中,upstream是项目url的简称,方便记忆,你可以随便自己起

image.png

5. 代码贡献

一般开发新功能或者修复bug都会另新建branch来写代码,然后merge进master分支。

git fetch upstream # 取回upstream远程仓库的所有分支
git rebase master # 将取回的分支中的master分支变基到当前分支(我的当前分支是master)
git checkout -b add_features # 使用当前分支来创建新的分支add_features,并切换到该分支
vim Test.md # 这是我修改的,添加了Test.md文件
git add Test.md #添加到暂存区
git commit -m "add Test.md" #commit 一下
git push origin add_features # 把当前commit推送到origin的add_features分支(如果没有该分支,则会创建)

当完成以上时,打开github会出现:

切换到add_features,点击New pull request:

image.png

注意:我们是从master分支创建的基础分支,然后修改代码,所以我们的add_features分支对用的是upstream/master。再点击Create pull request就可以提交pr了(通常上图的右边会有reviewer,需要reviewer approve才能merger你的pr)。

6. 最后就是删除刚刚创建的本地和远程分支了

git branch -D add_features # 删除本地add_features分支
git push origin add_features # 删除远程origin仓库add_features分支,因为这相当于把空的分支push到origin/add_features,就是删除啦

如果有更好的建议欢迎留言,也帮我完善下这篇文章