1

我正在尝试迁移一个非常大的 svn 存储库,最初我只是从修订版 13989 开始获取。

这让我有机会拥有一个非常棒的最新 git 镜像 - 但创建需要数周时间。

现在我想在那里获得完整的历史记录(即 r1-13989)并尝试这样做:

svn git fetch -r 0:13989

(如Git svn clone 中所述:如何推迟获取修订历史记录

这似乎有效(它获取了 3 天),但之前的历史突然在 13989 结束的文件仍然有这个突然结束。

新获取的修订未与历史记录对齐。

除了必须再次开始执行完整的 giv svn init/fetch 之外,还有什么方法可以解决这个问题?

4

1 回答 1

0

Git 提交 ID 是其内容的哈希。包括它的元数据,包括父 ID。因此,特定的提交永远不能修改它的历史。

Git 有一种机制来伪造父母提交。它被称为“嫁接”。(我不记得确切的细节;在文档中查找)。它只是本地的,因为自动共享将是一个安全问题。

它还具有重写整个历史记录的机制,即filter-branch命令。这将使用新的提交 ID 创建新的历史记录,其中包含您之前指定为移植物的父母。如果您要永久切换到 git 并且将停止提交颠覆,您可以继续使用 filter-branch 来应用嫁接。我不确定 git-svn 是否会在操作后工作(或如何修复它),因为它有一些额外的元数据。

于 2012-09-25T08:36:43.463 回答