Py学习  »  Git

【效率】如何用Git来规范化开发自己的模型

机器学习初学者 • 1 年前 • 189 次点击  

本文由博主Hubery_Jun提供,点击阅读原文即可跳转。

1. 流程

  • develop 开发分支:开发人员每天都需要拉取/提交最新代码的分支
  • test 测试分支:开发人员开发完并自测通过后,发布到测试环境的分支
  • release 预发布分支:测试环境测试通过后,将测试分支的代码发布到预发环境的分支(这个得看公司支不支持预发环境,没有的话就可以不采用这条分支)
  • master 线上分支:预发环境测试通过后,运营/测试会将此分支代码发布到线上环境
  • hotfix 分支:在 master 发现新的 bug 时,需要创建一个 hotfix,完成后,合并到 masterdevelop 分支

大致流程

  • 开发人员每天都需要拉取、提交最新的代码到 develop 分支
  • 开发完毕后,开始 集成测试,测试无误后提交到 test 分支,并发布到测试环境,交由测试人员测试
  • 测试环境通过后,发布到 release 分支上,进行预发布环境测试
  • 预发环境通过后,发布到 master 分支上并打上标签 tag
  • 如果线上分支出现 bug,这时开发者应该基于预发布(没有预发布环境就用 master 分支),新建一个 bug 分支用来临时解决 bug,处理完成后申请合并到预发布分支(好处是不会影响正在开发中的功能)

1.1 克隆指定分支

场景:要求使用非master分支(如next分支)进行开发

git clone -b next “git地址”

1.2 优雅的在分支上开发

1)克隆到本地的分支为  next 分支,但是不能直接在上面开发,而是需要另外创建分支:

# 创建并切换到新的分支 next-dev,其中 add_login 为分支说明(可不加)
git checkout -b next-dev/add_login 

2)在 next-dev 分支上开发完后, 将代码提交到本地仓库:

git add . # ".“的意思就是保存添加所有修改到暂存区
git commit -m “注释”  # 暂存区中的修改提交到本地仓库,commit 规范可参考 6.1 commit 规范

3)将 next-dev 分支合并到 next 分支:

# 先切换到 next 分支
git checkout next # 切换之前一定要先执行第二步

# 从远端拉取最新的代码,当你合并分支的时候,可能其他同事又提交了新的内容,所以最好先拉取一次最新的代码
git pull origin next

# 合并(如果合并发现有冲突,可以使用可视化工具查看冲突的代码,如:pycharm、BCompare4
git merge next-dev

# 将本地代码推送到远程
git push origin next:next # ”:“前面的是本地分支的名字,”:"后面的是远程分支的名字

注意:合并之前先 commit,合并之前先 git pull

2. 常用命令

# ssh 方式需要配置 SSH Key,https 需要每次都输入用户名和密码
cd /d/python-code/
$ git clone git@github.com:wangy8961/flask-vuejs-madblog.git
    
git init # 初始化本地仓库
git status # 查看状态
git add . # 添加到暂存库
git commit -m 'xxx' # 提交
git push -u origin master # 推送到远端

git remote add origin “HTTPS地址”  # 关联远程仓库

# 从远端拉取最新代码到本地
git pull  # 自动合并
git fetch  # 不合并

# 分支
git checkout -b feat/add-artical # 创建新的分支 feat,并切到新分支,add-artical 为对这个分支的描述
git branch -d dev # 删除 dev 分支

3. 拉取最新代码

# 查看已关联的仓库
$ git remote -v
origin  https://gitee.com/hubery_jun/flask-vuejs-madblog (fetch)
origin  https://gitee.com/hubery_jun/flask-vuejs-madblog (push)

# 类似于 git pull,也是用于拉取最新代码
$ git fetch
# 或拉取指定的远程主机上的分支,如 origin 上的 master
$ git fetch origin master

git fetch 与 git pull 的区别

  • git fetch
    • 远端跟踪分支:可以更改远端跟踪分支
    • 拉取:会将数据拉取到本地仓库,但是不会自动合并或修改当前的工作
    • commitID:本地库中 mastercommitID 不变,还是等于 1
  • git pull
    • 远端跟踪分支:无法对远端跟踪分支操作,必须先切回到本地分支然后创建一个新的 commit 提交
    • 拉取:从远处获取最新版本,并合并到本地,会自动合并或修改当前的工作
    • commitID:本地库中 mastercommitID 发生改变,变成了 2

用法

1、git pull

git pull  :
    
# 将远端主机 origin 的 master 分支拉下来,与本地 dev 分支合并,若未指定本地分支(那么将与本地当前分支合并)
git pull origin master:dev
    
# 用 git fetch 表示
git fetch origin master:dev
git merge dev

2、git fetch

# 方法一
git fetch origin master # 从远端 origin 仓库的 master 分支拉取最新代码
git log -p master.. origin/master # 比较本地的仓库和远端仓库的区别
git merge origin/master # 将远端拉取的最新代码合并到本地仓库,远端和本地的合并

# 方法二
git fetch origin master:temp # 从远端 origin 仓库的 master 分支拉取最新代码到本地并在本地创建一个新的分支 temp
git diff  # 比较 master 分支和 temp 分支的不同
git merge temp # 合并 temp 分支到 master 分支
git branch -d temp # 删除 temp 分支

注意:git fetch 更安全也更符合实际要求,可以在合并前,先查看更新情况,根据实际情况再决定是否合并

4. git push 常用用法

一般形式:

git push    

# origin 为远程主机名,将本地 next 分支推送到远程 next 分支
git push origin next:next

省略远程分支:

# 表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin master

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master

git push origin :refs/for/master 

如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到 origin 主机的对应分支 :

git push origin

如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用 git branch -r ,查看远程的分支名:

git push

5. 分支管理

git checkout -b dev  # 创建并切换到分支
git branch -d dev  # 删除分支
git branch   # 查看当前分支

6. 代码提交

添加到存储库、合并分支

git add .  # 添加所有
git commit -m 'xxxx' # 提交
git checkout master  # 切换到主分支
git merge dev  # 合并 dev 分支到 master 主分支
git branch -d dev # 删除 dev 分支
git branch  # 查看当前分支

commit 规范

commit 的内容也应该遵守规范,一般来说是

  • fix:xx :表示修改了XX代码
  • feat:xx :新增了XX需求
  • style:xx :修改了部分的样式
  • delete:xx:删除了某些无用的部分

推送到远程

git push -u origin master # 推送到远端 master

注意:合并分支必须先切换分支,删除分支不是必须的!但是流程最好是:先创建分支 ---> 合并分支 ---> 提交 ---> 删除分支 ----> 创建分支(第二天)

打标签

git tag v0.1 # 打标签 v0.1
git tag  # 查看所有标签
git show v0.1 # 查看 v0.1 标签(内容)

# 1. 同步单个标签
$ git push origin v0.1

# 2. 同步所有标签
$ git push --tags
# 或者:
$ git push origin --tags
往期精彩回顾




  • 交流群

欢迎加入机器学习爱好者微信群一起和同行交流,目前有机器学习交流群、博士群、博士申报交流、CV、NLP等微信群,请扫描下面的微信号加群,备注:”昵称-学校/公司-研究方向“,例如:”张小明-浙大-CV“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~(也可以加入机器学习交流qq群772479961




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/170678
 
189 次点击