从 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
git-svn 多个 git 存储库到同一个 svn 存储库