【问题标题】:Migrate a repo not always using the trunk/branches/tags structure from SVN to GIT不总是使用trunk/branches/tags结构从SVN迁移到GIT
【发布时间】:2011-09-26 15:11:38
【问题描述】:

我正在寻找一种将我的一个 SVN 存储库永久迁移到 git 的方法(即在导入后不会使用 git-svn,并且将再次克隆 repo 以消除所有 git-svn 剩余部分)。通常这将是一件容易的事情 - 只需按照http://www.jonmaddox.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/ 中说明的步骤进行操作即可。

但是,在 SVN 存储库中,我在一段时间后切换到了 trunk/branches/tags 结构,因此大约 2000 次提交中约有一半在 / 中的实际主干中工作,而另一半在 /trunk/ 中(即有一个大提交移动所有内容)所以在执行 git svn 初始化时既不使用 -s 也不使用它将正常工作。

我现在正在寻找一种将存储库正确导入 git 的方法,即保留分支信息(没有标签,我从未创建任何标签),同时又不会弄乱旧的提交。如果这是不可能的,我想知道是否有办法重写旧的提交来更改 repo,以便它使用trunk/branches/tags 结构 - 然后我可以简单地在 git-svn 中使用-s

【问题讨论】:

  • 如果它是公开的,请尝试让 github 为您进行导入。
  • 不是(而且我很确定 github 也不支持这种相当特殊的情况)。
  • 你可以使用 git-svn 的 -r 开关首先克隆到使用 -T <trunk> 更改结构的位置,然后在第二个命令中使用 -s <stdlayout> 从那里导入吗?

标签: git svn git-svn


【解决方案1】:

TL,DR:当可以接受一些手动工作时,可以修复问题中描述的混乱的存储库。最简单的方法是使用 SVN 转储文件,然后使用带有 stdlayout 选项的 git-svn 简单地导入它。


我设法通过重写存储库的 svndump 以从一开始就包含正确的结构来做到这一点:

svnadmin dump orig/ --incremental > repo.svndump

然后我使用了一个小的内联 Perl 脚本来更改文件夹:

perl -pe 's/^Node-path: (?!trunk|branches|tags)(.+)$/Node-path: trunk\/$1/g' repo.svndump > repo2.svndump

由于转储现在无效 - 需要在 r0 中创建 trunk 文件夹,并且需要删除从 //trunk 的所有内容的提交 - 我手动编辑了转储文件(幸运的是,所有元数据都是明文)并在 r0 的更改开头添加以下内容:

Node-path: trunk
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END

在提交移动所有文件时,我删除了所有操作并添加了以下内容以创建 branches 文件夹(如果我使用过 tags 文件夹,同样如此)

Node-path: branches
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10

PROPS-END

编辑后的转储文件现在可以使用svnadmin load 加载,给我一个可以通过 git-svn 导入而没有任何问题的存储库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2016-11-24
    • 2018-11-08
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多