2

首先,我错误地将另一个 repo 源直接复制到一个更大的项目中,在一个子目录中。从那时起,原始 repo 和 subdir 都发生了变化。现在我了解了 git-subtree,我想将 subdir 作为一个真正的子树,以便我可以轻松地同步原始 repo 的更改。

我尝试了“git-subtree split”,然后从原始存储库中提取最新源,它就起作用了。但是,我不想要整个历史记录,但是“--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. 

看起来壁球仅适用于添加但不拆分的子树。

任何想法?谢谢。

4

2 回答 2

2

我对git-subtreegit subtree merge感到困惑

它们是不同的东西,但也许 git-subtree 是一些git subtree merge 东西的包装器 https://git-scm.com/book/en/v1/Git-Tools-Subtree-Merging

这是关于两者之间差异的一个很好的答案:
What is the difference between git subtree merge and git-subtree

据我了解,最容易做的事情是

1.删​​除xxx-dir目录并提交更改

rm -r xxx-dir
commit -am "xxx subtree"

2.添加子树

git subtree add --prefix=xxx-dir --squash xxx master

不利的一面是,这样做会通过 3 次提交更改主回购历史记录:

  1. 删除的提交xxx-dir
  2. “导入”子树的提交,其历史被压缩为一个提交
  3. 合并导入的子树的提交

据我了解,这是 git-subtree 的一种限制。

顺便说一句,这应该是git-subtree 的源代码,也许比我更熟练的人可以挖掘它。

再见!

于 2016-03-22T21:33:07.747 回答
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。或者你是想说你再次尝试了这个命令,而不是你在这里写的,WITH --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.

你是从哪个分支运行的?似乎您正在尝试将已签出的同一分支中的更改合并到其自身的子文件夹中。由于命令失败,因此无法合并。我不认为它是说壁球是问题,只是它碰巧是壁球风格的合并失败了。

于 2014-03-06T08:23:09.013 回答