是的,我知道。你为什么要从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
在此之后我不能做太多....
答案 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将无法正常工作。
请发布您尝试迁移的详细信息。虽然您发布的内容是一条有用的错误消息,但对于您用于解决该错误的步骤列表,它会有十倍的用途。