首先,我错误地将另一个repo源直接复制到一个较大的项目中,在一个子目录中。从那时起,原始的repo和subdir都发生了变化。现在我已经了解了git-subtree,我想将子目录作为一个真正的子树,以便我可以轻松地同步原始仓库中的更改。
我尝试了'git-subtree split',然后从原始repo中获取最新来源,它只是起作用。但是,我不想要整个历史,但'--squash'不能用于'拆分',这是我的命令
git subtree split -P xxx-dir --onto==1940032
git remote add xxx https://github.com....
git fetch xxx
git subtree pull -P xxx-dir xxx master
# the pull worked, but whole history of xxx was imported too. '--squash' didn't work for above 'pull'
git subtree merge -P xxx-dir xxx/master --squash
# Can't squash-merge: 'xxx-dir' was never added.
看起来像壁球只适用于添加但不分割的子树。
有什么想法吗?感谢。
答案 0 :(得分:1)
我对git-subtree和git subtree merge
感到困惑它们是不同的东西但是git-subtree可能是某种git subtree merge stuff的包装器 https://git-scm.com/book/en/v1/Git-Tools-Subtree-Merging
对于两者之间的差异,这是一个很好的答案:
What is the difference between git subtree merge and git-subtree
据我所知,最容易做到的是
xxx-dir
目录并提交更改rm -r xxx-dir
commit -am "xxx subtree"
git subtree add --prefix=xxx-dir --squash xxx master
缺点是这样做会改变3个提交的主要回购历史记录:
xxx-dir
据我所知,这是git-subtree的一种限制。
顺便说一句,这应该是the source code of git-subtree也许比我更熟练的人可以深入研究。
侨!
答案 1 :(得分:0)
关于:
git subtree pull -P xxx-dir xxx master
# the pull worked, but whole history of xxx was imported too. '--squash' didn't work for above 'pull'
看来你没有使用--squash。或者你是想说你再次尝试了这个命令,而不是你在这里写的那个,用--squash? git subtree pull --squash -P xxx-dir xxx master
......并且关注:
git subtree merge -P xxx-dir xxx/master --squash
# Can't squash-merge: 'xxx-dir' was never added.
你从哪个分支运行过这个?您似乎正在尝试将已签出的同一分支中的更改合并到自身的子文件夹中。由于命令失败,因此无法合并。我不认为壁球是问题所在,只是它恰好是一种失败的壁球式合并。