Answer 0
我在日常工作流程中不使用 git-subtree,所以我必须对此进行一些研究,但是在这里:
git subtree push
does git subtree split
其次是git push
。命令,这显示了这个提交列表实际上是git subtree split
. If split
在提交消息中找不到标有适当的“git-subtree-dir:”行的提交,然后它会遍历整个项目历史记录并创建新的历史记录,修剪到单个目录 - 在您的情况下它必须这样做。
如何避免这种情况?
成功后git subtree push
, 你可以做git subtree split --rejoin
[1]。这将创建空的合并提交,它将子树的历史记录与项目的历史记录连接起来;未来的电话git subtree
在分割子目录 [2] 的历史记录时将使用来自该合并提交的消息。
相同的信息should被放置在合并提交之后git subtree pull
,但通常不是(有时是)[3];你可以做git subtree split
after git subtree pull
,但结果图看起来很难看。请参阅[3]。
Answer 1
真的很糟糕吗?很高兴将其打印出来。在打印每行回车符后,我得到了很好的“动画”,从 0 到 n (在单行中 - 不是输出,您粘贴在问题中)。也许您的终端无法识别回车符(我猜这可能是 Windows 或 OS X 上的问题)?您使用什么操作系统?
Answer 2
你可以隐藏它-q|--quiet
如果你不能使用split --rejoin
这个输出确实让你烦恼。
参考文献和我的评论
[1] 但请注意!手册页说:
如果您使用“--squash”进行所有合并,拆分时不要使用“--rejoin”,因为无论如何您都不希望子项目的历史记录成为项目的一部分。
So use --rejoin
如果它适合您的特定情况。
[2]
可以说这可以实现更好,但是git-subtree
无法将其存储在提交对象本身中,因为它不是 git 的本机功能(还?)。这是 bash 脚本,您可以在 contrib/ 目录中找到:https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh这可能就是为什么这个功能的文档很少的原因(嘿,但是手册页很棒)。
[3]
我尝试了一下,有时看到正确的合并提交出现 - 不知何故,它似乎与情况有关,当git subtree pull
导致了冲突。这可能表明 git-subtree.sh 中存在错误;给我更多信息,以便我可以进一步调查(并希望修复它)。我查看了该文件的历史记录,没有看到相关的修复...
你使用什么版本的 git? (我的是1.9.3)。
您使用该共享目录的工作流程是什么?
是吗git subtree add
编辑?
提交是双向流动的,还是仅在单个存储库中创建?