如何使用压缩提交将现有子目录作为另一个git回购的子树?

如何使用压缩提交将现有子目录作为另一个git回购的子树?,git,git-subtree,Git,Git Subtree,首先,我错误地将另一个回购来源直接复制到一个更大的项目,在一个细分市场。从那时起,原始回购协议和细分利率都发生了变化。现在我已经了解了git子树,我想将subdir作为一个真正的子树,这样我就可以轻松地同步原始repo的更改 我尝试了“git子树拆分”,然后从原始回购协议中提取最新的源代码,结果很好。然而,我不想要整个历史,但是'--squash'不适用于'split',下面是我的命令 git subtree split -P xxx-dir --onto==1940032 git remote

首先,我错误地将另一个回购来源直接复制到一个更大的项目,在一个细分市场。从那时起,原始回购协议和细分利率都发生了变化。现在我已经了解了git子树,我想将subdir作为一个真正的子树,这样我就可以轻松地同步原始repo的更改

我尝试了“git子树拆分”,然后从原始回购协议中提取最新的源代码,结果很好。然而,我不想要整个历史,但是'--squash'不适用于'split',下面是我的命令

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. 
看起来挤压只适用于添加的子树,而不适用于拆分的子树

有什么想法吗?谢谢。

关于:

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.
看来你没有用壁球。或者你是想说你再次尝试了这个命令,而不是像你在这里写的那样,用挤压<代码>git子树拉-挤压-P xxx dir xxx master

。。。关于:

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.
你是从哪个部门经营这个的?似乎您正试图将签出的同一分支中的更改合并到其自身的子文件夹中。由于命令失败,因此无法合并。我认为这并不是说壁球是个问题,只是碰巧壁球风格的合并失败了。

我被和搞糊涂了

它们是不同的东西,但也许git子树是某种类型的包装

这是一个关于两者差异的好答案:

据我所知,做你想做的事最容易

1.删除
xxx目录
并提交更改 2.添加子树 缺点是这样做会更改主回购历史记录,并提交3次:

  • 删除xxx目录的提交
  • “导入”子树并将其历史压缩为一个提交的提交
  • 合并导入的子树的提交
  • 据我所知,这是git子树的一种限制

    顺便说一句,这应该是一个比我更熟练的人可以挖掘它

    再见