从 SVN 迁移到 Git 存储库,其中同一项目的一部分已经发生迁移

Posted

技术标签:

【中文标题】从 SVN 迁移到 Git 存储库,其中同一项目的一部分已经发生迁移【英文标题】:Migrate from SVN to a Git repository, where a migration of a part of the same project already took place 【发布时间】:2021-10-11 10:29:12 【问题描述】:

场景

我面临这样一种情况,即通过 SVN 进行版本控制的项目 X 需要转移到通过 git 进行版本控制的存储库 A

不过,之前X 也做过类似的事情。让项目X 包含三个文件夹的工作树:_0_1_2。多年前,_0 的子文件夹被用于通过svn2git 创建一个新的 git 存储库。文件夹 _1_2 及其所有子文件夹和内容都在 SVN 中,因为它们包含大量不需要在 A 中维护 X 的数据。

但是现在_2 的子文件夹也需要在 git 存储库A 中。它仍然存储在 SVN 存储库中,并且自初始迁移以来,已通过其他提交进行了更改。

我正在研究svn2git,以便将_2 的子文件夹也迁移到A,其中X 已经存在。我担心的是,如果_2通过git2svn转移到一个git仓库,然后这个git仓库又迁移到A,那么很可能有冗余历史。 _0 和 _ 2share a commit history, the history of_0was originally transferred into git, the history of_2` 现在都将被转移到 git 中,但是这两个历史之间没有映射,因此我预计会有冗余。

问题

这个任务能完成吗?否则,我可能会停止这些保留 _2 历史的努力,而只是做一个干净的初始提交。

目前我认为没有多余的历史记录。

【问题讨论】:

一个问题突然出现在我脑海中:在你运行 svn2git 之后,你是否可以保持一个简单的旧 git-svn 设置,你保持不同步?或者它正在使用您与 svn 同步的其他技巧? 不,我正在进行一次性迁移。无意使用 git 来镜像和控制 SVN 存储库,即“同步”。希望能回答你的问题 是的,确实如此。所以没有 git-svn 设置。谢谢!那时我的答案仍然存在。让我们看看情况如何。 【参考方案1】:

我认为你可以尝试的最好的方法是克隆你现在需要的分支,从 git repo 上存在的最后一个修订开始(我不知道这如何与 svn2git 一起工作。我知道那个普通的旧 @ 987654321@ 支持以随机版本开始克隆)。然后,当您克隆了该分支时,您可以在原始 git clone 之上重新设置该分支(与我们所说的开始的版本完全相同)。这可以通过向 new git clone 添加远程来完成,以便它可以访问旧的 git clone。然后 rebase 分支,然后随意推入第一个 git clone 的分支。

【讨论】:

我将不得不考虑这个解决方案。将在下周中旬回到这个线程。感谢您的努力。 仍然不确定我是否理解正确。 “克隆你现在需要的分支”,我现在需要一个 SVN 存储库的主干,它与当前存在的 git 存储库的原始源相同。 “从 git repo 上的最后一个版本开始”——我完全不明白。你的意思是从 SVN 主干克隆的新 git repo 吗?还是已经存在的回购?我不是 100% 确定我们在同一页面上。 假设您在原始存储库中将 svn 主干克隆到修订版 X。在创建我所说的第二个克隆时,您可以告诉 git-svn 从修订版 X 开始克隆(使用 @ 987654323@,如果我没记错的话)。

以上是关于从 SVN 迁移到 Git 存储库,其中同一项目的一部分已经发生迁移的主要内容,如果未能解决你的问题,请参考以下文章

使用没有主干标签和分支的 SVN 存储库从 SVN 迁移到 Git

将特定文件夹从 SVN 迁移到 Git

git-svn 多个 git 存储库到同一个 svn 存储库

如何在 svn 上,在 Windows 上,用一个裸仓库镜像 git

迁移到 GIT 后测试应用程序

我可以将单个文件从 CVS 迁移到 SVN 吗?