我编写并维护了一个名为reposurgeon的开源工具,它可以编辑版本控制存储库历史记录,并可用于在版本控制系统之间移动项目历史记录。最近,我提供了完整的支持,以便读取Subversion转储文件和repos。但是,reposurgeon目前还做不好一件事情,那就是将通过复制完成的Subversion分支合并转换为git风格的DAG合并。
为了正确处理这部分内容,我需要更好地理解git快速导入流中合并提交的语义。我的问题是关于合并提交后哪个版本的内容应该可见。
当然,与合并提交相关的文件修改会使其内容在此处可见。我的问题是关于未被该提交触及的路径。
如果某个路径仅在合并祖先的一个提交链中具有内容,则我认为该内容应该是可见的。这是否正确?
如果某个路径在合并祖先的多个提交链中都有内容,哪个版本将可见?
如果某些路径上的文件被删除,有什么规则可以预测何时会在合并修订中删除它们?
fast-import
,你可以使用filemodify
(M
) 命令提供这些信息。如果你使用from
+merge
,那么你可以相对于from
祖先指定更改;如果你使用merge
+merge
,那么你需要从空树开始,同时提供所有文件的状态。 - hobbs