以一些父存储库的一大块作为另一个子存储库的主要起点的情况为例,从原始存储库中删除,并生成子模块。(所有这些都已经完成了,现在已经过去了。)
我认为.git/info/grafts将允许保存git-blame和git-annotate的历史,并且可以在事后使用。
但是,如果这些文件并不完全相同呢?例如,从旧的原始父存储库中删除了一个版本,并将略微修改的版本提交到新子模块的子模块中?还能引用吗?特别是如果两个存储库都在继续更新,并且人们不希望重写任何过去的历史(比需要的更多)。
发布于 2014-06-17 03:41:14
提交不包含对diffs的引用,它们包含对树的引用,其中树基本上就是您的工作目录应该看起来的样子。如果你用树1提交A,用树2提交B,那么当你要求显示A和B之间的差异时,git会计算树1和树2之间的差异。
由此可以看出,移植时文件不是100%相同也无关紧要。但是,如果它们不是100%相同,那么当您请求显示提交时,任何差异都将(正确地)显示出来。
请注意,尽管这通常与子模块无关,但子模块使用独立的gitdirs,因此父历史记录不会自动可用。在移植工作之前,您需要确保获取所需的历史记录。此外,移植是一种局部操作。其他克隆您的存储库的人将没有获得移植物的选项。你可以考虑git replace,它使用常规的ref,并且应该可以被其他想要它们的人获取。
https://stackoverflow.com/questions/24248274
复制相似问题