【Python程序开发系列】Git-Clone模式软件开发工作流程和常用命令总结

发布时间:2024年01月22日

一、问题

????直接克隆项目和先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、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信!

文章来源:https://blog.csdn.net/sinat_41858359/article/details/135739601
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。