将旧的 svn 项目历史添加到 git svn 中

4

我下载了一个svn仓库

git svn clone -s svn+ssh://svn.dummy.com -r666666:HEAD

现在我想要将早期历史记录添加到项目中。我是否可以稍后执行此操作,还是必须重新下载整个项目?
基本上我想做的是检出一个包含其历史记录的大型软件包。git svn 总是在某个点崩溃。SubGit 对于我来说完全不起作用(使用svn+ssh)。欢迎提供替代方案。

1
“git svn”通常会在某个时候崩溃,但只需多次执行“git svn fetch”,直到获取完整的历史记录即可简单地恢复它。 - onionjake
1
KDE的svn2git工具能够处理非常大的Subversion存储库。http://www.midwesternmac.com/blogs/jeff-geerling/switching-svn-repository-svn2git - onionjake
1
@onionjake git svn fetch 有时可以恢复,但在某些时候会停止工作。我从未成功获取到这个巨大仓库的完整历史记录,总是遇到 Perl 错误。 - pfnuesel
1
@onionjake svn2git 可以将 svn 仓库转换为 git 仓库,但是我之后无法提交到 svn 仓库。出于同样的原因,SubGit 对我也不起作用。 - pfnuesel
你使用的是哪个版本的git? - onionjake
@onionjake git 版本为 2.4.0.rc2.18.g1eb0545 - pfnuesel
1个回答

5
两个建议:从一开始导入/转换整个Subversion存储库,使用SubGit进行转换。
可以稍后添加旧的历史记录(我两年前就这样做了),但这一点一点也不有趣。需要满足某些要求才能实现,并且该过程并不直观。git本身并不能提供太多帮助,因为这是一种非常不寻常的操作。您可以在this article中找到整个工作流程的逐步说明。
此外,它会使您的同事感到困惑,因为提交标识符在过程中会发生更改,他们最终会得到重复的提交(具有相同的消息和文件更改,但哈希值不同)。 SubGitgit svn做得更好。它生成的时间轴更像原始的Subversion时间轴。

1
使用 git svn 导入整个 Subversion 历史记录需要几天时间。我尝试过,但总是在某个时候崩溃。这就是为什么我想逐步添加旧的历史记录。SubGit 是否可以替代 git svn?如果可以,我会试一试。 - pfnuesel
1
SubGit是一款独立的软件,可以作为双向的svn-git网关(将尽可能多的git功能推送到svn中,支持或可以以某种方式进行转换),但也可用于从Subversion一次性导入到Git。我的存储库只有大约300个提交(PHP文件、几个图像,没有大型二进制文件),转换只需几分钟。我不知道它在大型存储库上的表现如何。试试看,也许它能帮助你。 - axiac
1
如果你将svn存储库分批转换为git,则可以使用git remote(连接存储库)和git rebase(执行实际连接)轻松地将它们连接起来。 在此过程中,您将失去提交日期(作者日期不受影响)。 我在回答中提供的冗长文章是关于如何在rebase之前备份它们,并在之后进行恢复的。 - axiac
1
在使用SubGit几个小时后,我确信它不是我要找的工具。它无法接受我的身份验证密钥,并希望在文件系统上存储我的未加密密码。此外,检出软件包非常麻烦,因为“subgit import”始终会失败,报告“错误:必须在'svn+ssh'连接的配置文件中指定用户名”,尽管已经指定了用户名。 - pfnuesel
1
尝试使用格式 svn+ssh://username@host/path-to-repository 作为 --svn-url 参数。密码可能被存储在您的主目录下的 .svn 子目录中(其中 svn 自身保存密码、加密或未加密,以及其配置文件)。如果存在,您可以很容易地识别并删除它。 - axiac
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接