git svn在修订时获取未对齐历史记录

git svn在修订时获取未对齐历史记录,git,git-svn,Git,Git Svn,我正在尝试迁移一个非常大的svn存储库,最初我刚开始从修订版13989获取 这让我有机会拥有一个最新的git镜像,这真是太棒了——但它花了好几个星期才创建出来 现在,我想获取其中的完整历史记录(即r1-13989),并尝试执行以下操作: svn git fetch-r 0:13989 (如中所述) 这似乎是可行的(这是3天的抓取),但以前的历史文件在13989之前突然结束,现在仍然有这个突然结束 新获取的修订未与历史记录对齐 除了重新开始执行完整的giv svn init/fetch之外,还有什

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

这让我有机会拥有一个最新的git镜像,这真是太棒了——但它花了好几个星期才创建出来

现在,我想获取其中的完整历史记录(即r1-13989),并尝试执行以下操作:

svn git fetch-r 0:13989

(如中所述)

这似乎是可行的(这是3天的抓取),但以前的历史文件在13989之前突然结束,现在仍然有这个突然结束

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


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

Git commit ID是其内容的散列。包括它的元数据,包括父ID。因此,特定提交不能修改它的历史记录

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


它还有一个重写整个历史的机制,即
过滤器分支
命令。这将使用新的提交ID创建新的历史记录,该ID将具有您以前指定为嫁接的父级。如果您正在永久地切换到git,并且将停止提交subversion,那么您可以继续过滤分支以应用嫁接。我不确定git svn是否会在操作后工作(或者如何修复),因为它有一些额外的元数据。

谢谢你的回答,是的,我没有想到git svn需要遵守的git repo中历史的不变性。不幸的是,在这个repo上运行git filter分支比实际重做完整的git svn要慢clone@MaxRydahlAndersen:哪个操作系统?我不认为在Linux上svn中的网络访问将成为主要瓶颈,但可以很容易地想象,在Windows上,文件系统要慢得多。无论如何,如果是这样的话,只需重新导入并重新设置任何未推送到subversion的工作的基础。