我看过很多有关此问题的SO帖子,没有解决方案。
我有一个subversion存储库,托管多个项目。我想将其中一个项目迁移到git,同时保留包含分支,标记和主干副本的历史记录。
这个项目最初有结构:
root/
dir/
mod1/
trunk/
branches/
tags/
mod2/
trunk/
branches/
tags/
...
最初这些项目是作为独立项目开发的,但事实证明它们比我们原先想象的更相关,我们决定通过将所有单独的主干,分支和标签目录复制到dir/
下面来进行重新组织。看起来像:
root/
dir/
trunk/
mod1/
mod2/
...
branches/
tags/
我的git svn clone
看起来像是:
git svn clone --no-metadata <svn_url>/root/dir -s git-svn-clone
完成后我按照this清理我的分支和标签,但是当我执行git log
时,我只看到从分支/标签/主干开始的时间点开始的历史记录复制在svn。
我已经尝试git log --follow
但这不起作用。我尝试了-M -C and --find-copies-harder
选项,它们都表现出同样的效果。
我认为通过确保克隆所有分支,标签和中继,git可以找到复制目录的父项。
我想要的是根本不可能吗?没有历史可能不是世界上最糟糕的事情,但它会很好。
答案 0 :(得分:2)
您可以使用我用于将本地subversion存储库迁移到git的subgit。
答案 1 :(得分:0)
不幸的是,没有解决这个问题的解决方案(至少我不知道)。在这种情况下,我总是从根目录的git svn克隆开始,之后再进行git fast-export --no-data
。然后我编写了一个脚本,它将所有svn分支转换为git分支,并使用该脚本生成一个fas-import文件,该文件又创建了git历史记录。
主要的问题是svn合并很容易被忽略(也取决于它们是否正确记录在svn中),合并看起来像是integratin分支中的一个大提交,而原始分支“在空中结束” ”
答案 2 :(得分:0)
以下是我所做的完美无瑕的工作:(见http://svnrating.com/svn-to-git-migration/)
首先,初始化svn到git迁移的新存储库 $ mkdir迁移 $ cd迁移 $ git svn init --stdlayout --prefix = svn /
接下来,获取svn存储库 $ git svn fetch
如果存储库很大,这可能需要一段时间。完成后,您可以将刚刚创建的存储库推送到远程或本地使用。