1

我已经看到了许多关于此的 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

完成之后,我按照这个清理我的分支和标签,但是当我做 a 时git log,我只看到从分支/标签/主干在 svn 中复制的那一点开始的历史记录。

我试过git log --follow了,但这不起作用。我已经尝试了这些-M -C and --find-copies-harder选项,它们都显示相同的内容。

我原以为通过确保我克隆了所有分支、标签和主干,git 将能够找到从中复制目录的父级。

我想要的根本不可能吗?没有历史并不是世界上最糟糕的事情,但它会很好。

4

3 回答 3

2

您可以使用我用来将本地 subversion 存储库迁移到 git 的subgit 。

于 2014-05-08T06:24:59.807 回答
0

不幸的是,对此没有交钥匙解决方案(至少我不知道)。在这种情况下,我总是从根目录的 git svn clone 开始,然后再做一个git fast-export --no-data。然后我编写了一个脚本,将所有这些 svn 分支转换为 git 分支,并使用该脚本生成一个 fas-import 文件,该文件进而创建 git 历史记录。

主要问题是 svn 合并很容易被忽略(也取决于它们是否正确记录在 svn 中),在某种程度上,合并看起来像是 integratin 分支中的一个大提交,而原始分支“在空中”结束。

于 2013-07-21T10:34:06.003 回答
0

这是我所做的完美无瑕的工作:(请参阅http://svnrating.com/svn-to-git-migration/

首先,为 svn 初始化一个新的仓库到 git migration $ mkdir migration $ cd migration $ git svn init --stdlayout --prefix=svn/

接下来,获取 svn 存储库 $ git svn fetch

如果存储库很大,这可能需要一段时间。完成后,您可以将刚刚创建的存储库推送到远程或本地使用。

于 2014-03-05T21:50:20.983 回答