gpt4 book ai didi

git - 将不总是使用 trunk/branches/tags 结构的 repo 从 SVN 迁移到 GIT

转载 作者:太空狗 更新时间:2023-10-29 13:44:13 25 4
gpt4 key购买 nike

我正在寻找一种永久性的方法(即导入后不会使用 git-svn,并且将再次克隆存储库以摆脱所有 git-svn 剩余部分)将我的一个 SVN 存储库迁移到 git。通常这是一件容易的事 - 只需执行 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 协议(protocol),以便它使用主干/分支/标签结构——那么我可以简单地使用 -s git-svn.

最佳答案

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 导入的存储库,没有任何问题。

关于git - 将不总是使用 trunk/branches/tags 结构的 repo 从 SVN 迁移到 GIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7557233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com