我编写并维护了一个名为 reposurgeon 的开源工具,它可以编辑版本控制存储库历史记录,并可用于在 VCS 之间移动项目历史记录。最近我提供了对读取 Subversion 转储文件和 repos 的全面支持。但是有一件事 reposurgeon 还没有做得很好,那就是通过复制到 git 样式的 DAG 合并来翻译 Subversion 分支合并。
为了使这部分正确,我需要比我更好地理解 git fast-import 流中合并提交的语义。我的问题是关于合并提交后哪个版本的内容应该是可见的。
当然,合并提交附加的文件修改使它们的内容在那里可见。我的问题是关于提交未触及的路径。
如果一条路径仅在合并的一个提交链祖先上有内容,我假设内容应该是可见的。那是对的吗?
如果一条路径在合并之前的多个提交链中包含内容,那么哪个版本将可见?
如果一个文件沿着某些路径被删除到合并,什么规则预测它什么时候在合并修订中被删除?