我们的开发团队目前正在使用 SVN 来管理我们的 Web 应用程序开发。管理 SVN 服务器的开发人员正在尝试将其从较旧的 Win XP 服务器迁移到另一台服务器,但尝试输出存储库转储失败(损坏或其他原因)。为什么会失败是另一个问题。
管理 SVN 存储库的开发人员建议导出旧存储库的当前 HEAD 以用作新 SVN 存储库的基础,但我们将丢失所有 SVN 历史记录。我在本地使用 git-svn,这意味着我有 1.5 年的提交信息存储在本地。有没有办法将这些提交从 git-svn 中取出并将它们放入新的 SVN 存储库?
答案1
如果您创建一个新的、空的 SVN 存储库,您可以将 git-svn 中的所有提交直接推送到存储库中吗?(没有使用过 git 或 git-svn,但如果我需要将其放入 svn 存储库中,我会对我的一个 hg 存储库执行此操作)
编辑:我设法通过 mercurial 手动重新定基来实现这一点。唯一看起来特别的是手动重新定基,而不是自动 svn 重新定基。在将 mercurial 纳入组合之前,您可以在 git-svn 中尝试这样做。
- 创建新的 SVN Repo:
svnadmin create targetSVN
- 在新的 SVN 仓库上进行初始提交:
svn co file://targetSVN svnCopy
cd svnCopy
touch test
svn add test; svn commit -m "Initial Import"
- 通过以下方式检查 repo
hg
:hg clone file://targetSVN hgCopy; cd hgCopy
- 从 git 拉取更改(通过
hg-git
):hg pull git://yourrepo.git
- 手动变基:(
hg rebase -s tip -d 0
应该0
是初始 SVN 提交,tip
应该是你从 git 中提取的内容的头部。确保 git 变更集是线性的(没有合并!)。如有必要,替换tip
git 头部的实际变更集编号(通过 找到hg heads
)。当它询问冲突时,接受所有远程更改。 hg push
直到所有更改都进入 svn repo。它每次推送 1 个变更集。