可以在大型回购分部后使用git移植物吗?

时间:2014-06-16 16:30:10

标签: git github split .git-info-grafts

以某个父存储库的大块作为另一个子存储库的主要起点,从原始存储库中删除,并改为创建子模块时为例。 (所有这些都已经完成,现在已经过去了。)

我看到.git/info/grafts允许用户保留git-blamegit-annotate的历史记录,并且可以事后使用。

但是,如果文件不完全相同怎么办?例如。从旧的原始父级仓库中删除了一个版本,并将略微修改的版本提交给新的子模块子级一个?可以参考吗?特别是如果两个存储库继续更新,而且不必处理重写任何过去的历史记录(不仅仅是需要)。

1 个答案:

答案 0 :(得分:0)

提交不持有对差异的引用,它们保存对树的引用,其中树基本上是工作目录的样子。如果您使用树1提交A,并使用树2提交B,那么当您要求显示A和B之间的差异时,git将计算树1和树2之间的差异。

由此可以更清楚一点,嫁接时文件不是100%相同并不重要。但是,如果它们不是100%相同,当您要求显示提交时,将(正确)显示任何差异。

请注意,尽管这通常与子模块无关,但子模块使用独立的gitdirs,因此父历史记录不会自动可用。在嫁接有任何工作机会之前,您需要确保获取所需的历史记录。此外,嫁接是一种本地操作。克隆您的存储库的其他人将无法获得移植物。您可以考虑git replace,它使用常规引用,并且应该由其他想要它们的人获取。