以某个父存储库的大块作为另一个子存储库的主要起点,从原始存储库中删除,并改为创建子模块时为例。 (所有这些都已经完成,现在已经过去了。)
我看到.git/info/grafts
允许用户保留git-blame
和git-annotate
的历史记录,并且可以事后使用。
但是,如果文件不完全相同怎么办?例如。从旧的原始父级仓库中删除了一个版本,并将略微修改的版本提交给新的子模块子级一个?可以参考吗?特别是如果两个存储库继续更新,而且不必处理重写任何过去的历史记录(不仅仅是需要)。
答案 0 :(得分:0)
提交不持有对差异的引用,它们保存对树的引用,其中树基本上是工作目录的样子。如果您使用树1提交A,并使用树2提交B,那么当您要求显示A和B之间的差异时,git将计算树1和树2之间的差异。
由此可以更清楚一点,嫁接时文件不是100%相同并不重要。但是,如果它们不是100%相同,当您要求显示提交时,将(正确)显示任何差异。
请注意,尽管这通常与子模块无关,但子模块使用独立的gitdirs,因此父历史记录不会自动可用。在嫁接有任何工作机会之前,您需要确保获取所需的历史记录。此外,嫁接是一种本地操作。克隆您的存储库的其他人将无法获得移植物。您可以考虑git replace
,它使用常规引用,并且应该由其他想要它们的人获取。