一、问题
直接克隆项目和先fork后克隆项目都是使用 Git 进行代码协作的常见方式,它们在不同的场景下有不同的用途和好处。
直接克隆项目是指先将原始仓库(中央仓库)克隆代码到本地。这种贡献代码方式适用于以下场景:
- 推送的权限:贡献代码的人有直接push到中央仓库的权限
- 项目的复杂度:流程比较少,迭代比较少
- 参与的人数:人数不多
非fork模式下,中央仓库(远程仓库)、本地仓库三者要保持同步(绿色线条的循环)
二、实现过程
2.1 clone
克隆中央仓库:
git clone <remote-url> [<local-directory>]
git clone -b <branch-name> <remote-url
2.2 关联远程仓库、配置连接协议
查看本地仓库关联的远程情况:
git remote -v
配置远程仓库名称和连接协议:
配置ssh协议连接(好处是不需要每次输入密码)
- git remote add upstream git@github.com:xxx/xxx.git(添加ssh协议)
删除当前远程仓库使用的这种协议连接
- git remote rm upstream
配置https协议连接
- git remote add upstream https://github.com/xxx/xxx.git(添加https协议)
2.3 新建本地功能分支并关联远程分支
从这一步到2.6创建PR是一个开发周期
查看分支情况:
git branch
git branch -r
git branch -a
新建本地分支并切换:
git checkout -b feat
创建同名远程分支,并且本地分支关联:
git push --set-upstream origin feat
查看本地分支关联的远程分支情况:
git branch -vv
2.4 开发:pull & stash & pull & add & commit & push
接下来你就可以在这个功能分支做开发,敲代码了。这一步是我们每天重复的工作。
先pull一下中央仓库dev分支保证代码最新:
git pull upstream dev
开敲......
一天结束了,想要提交代码了,将代码放入暂存区stash:
git stash save "save message"
再次pull 主仓库的代码:
git pull upstream dev
这样是不会产生冲突的,这时我们将暂存区的内容拿出来:
git stash pop ( 这一句的作用相当于 git stash apply stash@{0} + git stash drop stash@{0})。
查看变更情况:
git diff
提交到暂存区:
git add . #这里的点是全部修改内容,或者自行选中单个文件
查看提交状态,显示有变更的文件:
git status
提交到本地仓库:
git commit -m "feat:add UserManagement
将本地的分支推送到自己的远端:
git push origin
# 由于建立了feat分支(本地功能分支)与origin/feat关联,可以直接git push origin
这时如果出现冲突,需要手动解决冲突。
2.5 创建PR,请求合并
当你觉得这个功能开发完成了,这个周期可以结束了。你就可以进行这一步了,创建PR或MR。这里的PR是中央仓库的feat分支-->中央仓库的dev分支
三、小结
这种模式流程比fork模式简单了一些,只有一个远程的中央仓库,本地仓库直接同中央仓库同步通信,PR是中央仓库两个分支之间的合并。这种模式适合于开发者有向中央仓库直接push的权利,而且合作开发的人数不多的情况下。如果开发人员较多,那么每个人需要在中央仓库新建一个功能分支,这显然就不行了,那就得用fork模式了。
作者简介:
读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信!