Git-2-SVN迁移?

时间:2012-04-04 15:14:39

标签: git svn migration git-svn

是的,我知道。你为什么要从Git迁移到SVN?

好吧,我碰巧遇到需要将巨大的Git仓库迁移到Subversion的情况!这是我根据Edwin评论尝试的一个工作流程:

首先创建一个本地SVN repo: svnadmin create svn_repo

接下来我看看我的Git回购: git clone git:myNameSpace/myProject

cd进入myProject并运行:

git svn init -s --prefix=svn/ file:///home/myHome/svn_repo/myProject

git svn fetch

git rev-list --parents master | grep '^.\{40\}$'查找根提交的哈希值,并且只提供一次提交。

接下来是获取空主干提交的哈希值: git rev-parse svn/trunk

遗憾的是,这个失败了:

fatal: ambiguous argument 'svn/trunk': unknown revision or path not in the working tree. Use '--' to separate paths from revisions

在此之后我不能做太多....

2 个答案:

答案 0 :(得分:8)

我建议您通过几个简单的步骤将其迁移到SubGit。

$ svnadmin create svn.repo
$ subgit configure svn.repo
$ nano svn.repo/conf/subgit.conf #edit path to your (bare!) Git repository (you may use "git clone --bare <URL> bare.git.repo" if you don't have it locally)
$ subgit install

这就是全部。虽然翻译SubGit会尽可能保留所有提交(甚至是临时),分支,合并,忽略,日期,EOL设置,标签等。

翻译后,存储库将同步(每次推送到Git都会转换为SVN版本,反之亦然)。要打破同步(如果您不需要),请运行

$ subgit uninstall svn.repo

答案 1 :(得分:3)

---添加细节后编辑---

您是否对svn/trunk进行了空的初始提交?如果没有,那么它将解释为什么你会得到一个在历史记录中找不到的错误。

评论(合并)

The --prefix gives you remote tracking branches like "svn/trunk" which
is nice because you don't get ambiguous names if you call your local
branch just "trunk" then. 

Then get the hash of the empty trunk commit:

倾向于暗示他们进行了svn/trunk提交以防止svn与预先存在的trunk目录发生冲突。如果是这样,也许你唯一的错误就是未提交svn/trunk以后才能找到?

---原帖如下---

你试过this吗?在线性化主干(或分支)历史记录之前,dcommit将无法正常工作。

请发布您尝试迁移的详细信息。虽然您发布的内容是一条有用的错误消息,但对于您用于解决该错误的步骤列表,它会有十倍的用途。