将两个SVN存储库迁移到Git时无法合并现有存储库

问题描述 投票:0回答:1

我最初在SVN上有一个仓库repoA。我们称其为初始提交“ commit#1”。我对该仓库进行了多次提交,使我提交了3号代码。这时,我将SVN存储库复制到SVN上的新位置,并继续在复制的存储库B中进行开发。同时,我还继续致力于存储库A。

以下描述了SVN存储库的外观:

Repo A: 1-2-3-4a-5a-6a \ Repo B: 4b-5b-6b

现在,我决定将两个存储库都移至Git。我的意图是克隆两个存储库,然后将它们重新加入到一个存储库中,将单独的提交保持为从上面的提交#3萌芽的独立分支。

因此,我执行了以下步骤:

git svn clone -s -A svn.authors --no-metadata http://subversion.foo.local/repoA_svn/path repoA git svn clone -s -A svn.authors --no-metadata http://subversion.foo.local/repoB_svn/path repoB cd repoA git branch repoA-branch # Branch for first repo git reset --hard <highest_common_hash> # To have only common history on master git checkout -b repoB-branch # Branch for second repo git pull ../repoB master

但是,一旦尝试执行拉操作,就会出现以下错误:

fatal: refusing to merge unrelated histories

当从SVN迁移时,由于我之前已移动repoB在SVN上的位置以将其与repoA分开,所以到repoA的链接丢失了。

因此,我从SVN迁移了两个Git仓库,如下所示: Repo A: 1-2-3-4a-5a-6a . Repo B: 4b-5b-6b

如您所见,链接已断开,因此无关的历史记录错误。

鉴于我们缺少历史链接,有人知道如何将repoB的提交添加到repoA吗?

我在拉动过程中尝试了--allow-unrelated-histories开关,这使我可以添加repoB的提交,但是它们都被压缩为一个,我想保留这些提交的历史记录。

git svn git-merge git-svn
1个回答
0
投票

为了简单起见,not回到必须对svn做任何事情,我会这样做:

# create a new third repo
git init /home/myuser/blahblah
cd /home/myuser/blahblah
# add thr other two git repos as remotes
git remote add repo1 whatever-url-for-repo1
git remote add repo2 whatever-url-for-repo2

现在,这两个存储库中的每一个都有一个主机,对吗? repo2 / master是从repo1 / master的第三版开始的,对吧?

git checkout first-revision-of-repo2/master # checkout this revision by id
git reset --soft third-revision-of-repo2/master # this revision is also by its id
git commit -m "Same comment as repo2/4b"

至此,您已经创建了4b'。与4b的content相同but它的父级为修订版3

# now we roll all the other revisions from 4b to the tip of repo2/master
git cherry-pick revision-4b..repo2/master

至此,您现在拥有新分支上的repo2 / master的历史记录(仍未命名,您正在使用分离的HEAD),它与repo1 / master有关,因为它原本应该存在。玩得开心。

© www.soinside.com 2019 - 2024. All rights reserved.