我可以从本地 git-svn 仓库恢复 SVN 仓库的历史记录吗?

我可以从本地 git-svn 仓库恢复 SVN 仓库的历史记录吗?

我们的开发团队目前正在使用 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 中尝试这样做。

  1. 创建新的 SVN Repo:svnadmin create targetSVN
  2. 在新的 SVN 仓库上进行初始提交:

    svn co file://targetSVN svnCopy cd svnCopy
    touch test
    svn add test; svn commit -m "Initial Import"

  3. 通过以下方式检查 repo hghg clone file://targetSVN hgCopy; cd hgCopy
  4. 从 git 拉取更改(通过hg-git):hg pull git://yourrepo.git
  5. 手动变基:(hg rebase -s tip -d 0应该0是初始 SVN 提交,tip应该是你从 git 中提取的内容的头部。确保 git 变更集是线性的(没有合并!)。如有必要,替换tipgit 头部的实际变更集编号(通过 找到hg heads)。当它询问冲突时,接受所有远程更改。
  6. hg push直到所有更改都进入 svn repo。它每次推送 1 个变更集。

相关内容