当前位置:   article > 正文

git subtree使用体验_git subtree split 慢

git subtree split 慢

git subtree


旧版本的git也支持(最老版本可以到 v1.5.2).

详细了解先看这篇文章,写的挺好:https://tech.youzan.com/git-subtree/

 

下面介绍具体操作:

1、初始化subtree项目

在主项目根目录的下面

git subtree add  --prefix=用来放S项目的相对路径   S项目git地址  xxx分支

例如:git subtree add --prefix=modules/MultiMedia/TVKPlayer_Android/ http://git.code.oa.com/XXX_Android.git tvideo/765

例如:git subtree add --prefix=modules/MultiMedia/ThumbPlayer/ http://git.code.oa.com/XXX_Android.git tvideo/765 --squash

 

问题1:如果subtree中有lfs的话,会add失败

解决方法: 先执行git lfs install --skip-smudge,再add

 

解释:

–prefix之后的=等号也可以用空格

问题:永远也解不完的冲突

–squash意思是把subtree的改动合并成一次commit,这样就不用拉取子项目完整的历史记录。

主项目的历史记录看起来还是比较整齐的。 但在子项目有更新,需要 subtree pull 的时候,却经常需要处理冲突。 严重的,在每次 subtree pull 的时候都需要重复处理同样的冲突,非常烦人

如果不使用 --squash 参数,子项目更新的时候,subtree pull 很顺利, 能够自动处理已解决过的冲突,缺点就是子项目的更新记录“污染”了主项目的

 

2、pull代码到父项目:

git subtree pull --prefix=S项目的路径   S项目git地址  xxx分支

例如:git subtree pull --prefix=modules/MultiMedia/TVKPlayer_Android/ http://git.code.oa.com/XXX_Android.git tvideo/765

例如:git subtree pull --prefix=modules/MultiMedia/ThumbPlayer/ http://git.code.oa.com/XXX_Android.git tvideo/765 --squash

 

3、push代码到subtree的仓库

在主项目的根目录下面:

git subtree push --prefix=S项目的路径   S项目git地址   xxx分支

例如: git subtree push --prefix=modules/MultiMedia/TVKPlayer_Android/ http://git.code.oa.com/XXX_Android.git tvideo/765

例如: git subtree push --prefix=modules/MultiMedia/ThumbPlayer/ http://git.code.oa.com/XXX_Android.git tvideo/765

git subtree merge --prefix=

 

给子仓库取一个好记的名字,为了后面使用方便

语法:git remote add -f

解释:其中-f意思是在添加远程仓库之后,立即执行fetch。

 

问题2:当主项目的 commit 提交太多后,再推送子项目到远程库的时候,subtree 每次都要遍历很多 commit,浪费的时间相当多,很是不爽。

解决方法:split打点,作为下次遍历的起点。

git subtree split --rejoin --prefix= --branch

例如:git subtree split --rejoin --prefix=themes/icarus --branch icarus

这个分支只是作起点储存用的,不用管它不用修改不用推送到远程库。下次使用相同的命令更新这个起点就可以了。

git subtree split --rejoin --prefix=modules/MultiMedia/ThumbPlayer/ --branch icarus

 

git 列出所有的 subtree

git log | grep git-subtree-dir | tr -d ' ' | cut -d ":" -f2 | sort | uniq

 

git subtree pull fatal refusing to merge unrelated histories问题

1. 用 git subtree add 是對的!

2. 記得下完 git subtree add 後,一定要多下一個下面的指令!

記得下完 git subtree add 後,一定要多下一個下面的指令!

記得下完 git subtree add 後,一定要多下一個下面的指令!

因為很重要所以說三次

git merge -s ours --no-commit --allow-unrelated-histories shareLibraryRepo/master

這行指令就是建立好 subtree 關係的關鍵步驟啊!!!(抱頭)就差了這一個步驟,所以讓我一開始會遇到 refusing to merge unrelated histories 的錯誤訊息 

git merge -s ours --no-commit --allow-unrelated-histories http://git.code.oa.com/XXX_Android.git tvideo/765

git merge -s ours --no-commit --allow-unrelated-histories http://git.code.oa.com/XXX_Android.git tvideo/765_test

git merge -s ours --no-commit --allow-unrelated-histories http://git.code.oa.com/XXX_Android.git tvideo/765_test

注:我在使用的时候好像没有使用这个命令

 

总体来说,git subTree 不是很好用,,首先是有上面提交的2个问题,体验上就不太好了。

如果不设计代码的双向同步,,可以考虑使用maven包方式

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/861255
推荐阅读
相关标签
  

闽ICP备14008679号