10

是的,我知道。为什么要从 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

好吧,在这之后我不能走太多......

4

2 回答 2

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
于 2012-05-12T15:03:10.307 回答
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目录发生冲突。如果是这样,也许您唯一的失误是没有提交 asvn/trunk以便以后找到?

--- 原帖如下---

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

请发布您尝试迁移的详细信息。虽然您发布的是有用的错误消息,但与您用来解决该错误的步骤列表相比,它的用处会高出十倍。

于 2012-04-04T15:24:40.463 回答