对于可能使用多机写代码且想备份+多执行机器且可能会在代码路径下存模型、手动单独修改某台机器的某些开关类再次执行, 破坏同步一致性的同学,推荐使用此篇配置: 1)对于个人开发来说: master为代码分支, 远程机器拉取master更新再切换到其他开发分支, 修改/存模型后如果要再次从远程机器本地的master更新, 先将本分支修改存入git(不需push) 再将master更新修改、再合并入开发分支. 2)对于团队开发而言: master为总分支, 每个人自己再起一个自己的代码分支, 其他类似
- https://blog.walterlv.com/post/git-merge-strategy.html
-s theirs 目前已不支持(无视本地修改直接采用对方)- -X theris 指智能合并中冲突地方选择对方
- 采用-X theirs策略自动处理冲突(一般为双方均修改行冲突) 使其恢复为master开发机代码端的状态
- 而对于远程机器手动修改且开发机master分支没有再次修改的部分 merge时不会自动退回原版, 如果需要重置为master分支的版本, 建议删除相应文件后重新merge, 不建议盲目使用回退恢复, 防止一些编译文件、产出文件丢失
使用密钥即可 参考本文件夹下git管理及同步.md
创建ssh-key 此外多台机器可以创建后用同一台的密钥和公钥替换, 在gitee或者github只需要绑定一个密钥即可
- 首先在机器上正常配置好git -master分支
- master分支更到最新
- 创建一个本地分支--可以不上传 但是每次修改需要add和commit提交 不需要push(可能有模型文件等大文件不方便网络传输) git checkout -b "newdev"
- 在newdev分支下修改 需要更新代码时: git checkout new dev git add -A git commit -m "mychange" #不需要push上传 git checkout master git pull origin master git checkout newdev git merge -X theirs master #并入
注: git branch可查看当前所在分支 git log --oneline --graph #查看git历史和版本号
个人电脑1(windows) [up.bat]<-\ / -> machine 1 [syn.sh]
\ / -> machine 2 [syn.sh]
-> [*](gitee)-- -> machine 3 [syn.sh]
/ \ -> machine 4 [syn.sh]
个人电脑2(linux/mac)[up.sh]<-/ \ -> machine 5 [syn.sh]
# up.sh / up.bat #开发机同步脚本
git pull origin master
git add -A
git commit -m "up"
git push origin master
# syn.sh #执行机同步脚本
git add -A && git commit -m "up"
git checkout master && git pull && git checkout dev && git merge -X theirs master
- 对于master分支,直接git clone仓库&保持完全同步即可
- 对于执行机的dev分支有些特殊,一方面尽可能同步,另一方面与master可以拉取,还要能够保留一些自己环境下的编译产出文件不同步,配置过程:
- 如果第一个配dev分支时,可以直接从master分支下git checkout -b dev创建
- 对于其他机器配dev分支,如果push需要注意.gitignore文件的内容是否被修改。dev分支仅存放部分脚本&上传csv数据结果,fetch后再merge本地最新的master,配置好.gitignore之后 后续无论是merge master还是pull origin dev都不会修改编译产出文件等dev分支的非同步内容
git fetch origin dev:dev git merge master #注意如果master有新修改的.gitignore dev分支下需要再次修改回想要的 git add -A && git commit -m "up" git push origin dev #可选
配置.gitignore文件 实现对模型大文件产出等文件脱离git管理
# .gitignore
*.tar
*.pth.tar
或可以反向选择,建议dev分支采用只放行csv及脚本的策略,作为数据结果记录备份上传,配置参考如下
*
!*/
!.gitignore
!*.csv
!*.xls
!*.xlsx
!*.sh
!*.md
!*.py
如果修改gitignore前已经在commit到dev分支中, 可以采用git rm -rf --cached *.tar删除, 再commit