我正在尝试迁移一个非常大的svn存储库,最初我刚开始从修订版13989中获取。
这让我有机会拥有一个非常棒的git镜像 - 但它需要数周的时间才能创建。
现在我想在那里获得完整的历史记录(即r1-13989),并尝试着:
svn git fetch -r 0:13989
(如Git svn clone: How to defer fetch of revision history中所述)
这似乎有效(它提取了3天),但之前的历史记录突然以13989结束,之后仍有这种突然结束。
新获取的修订版未与历史记录对齐。
除了必须再次开始完整的完整giv svn init / fetch之外,还有什么方法可以解决这个问题?
答案 0 :(得分:0)
Git commit ID是其内容的哈希值。包括它的元数据,包括父ID。因此,特定的提交不能永远修改它的历史记录。
Git有一种伪造父母提交的机制。它被称为“移植物”。 (我不记得确切的细节;在文档中查找)。它只是本地的,因为自动共享会带来安全问题。
它还有一个重写整个历史记录的机制,即filter-branch
命令。这将创建具有新提交ID的新历史记录,这些ID将具有您先前指定为移植的父项。如果您正在切换到git并且将停止承诺颠覆,您可以继续使用filter-branch来应用移植。我不确定git-svn在操作之后是否会起作用(或者如何修复它),因为它有一些额外的元数据。