10

我有一项艰巨的任务,即在两个团队之间合并一个包含大量文件的站点。一个团队一直在努力,一个团队正在git使用svn. 我可以就解决这个问题的最佳方法获得一些帮助吗?我在想的是我将创建一个新的裸仓库

git clone --bare ~/dir gitversion.git

然后从那里创建一个分支

git checkout -b import-svn

然后在那个分支上,我将从 svn 中提取

svn checkout svn://svnversion/trunk

现在在这个分支上我会变基吗?

git rebase origin/master

然后切换回master分支

git merge import-svn

我尝试了这样的事情,但似乎无处可去。从来没有任何合并冲突或任何没有意义的事情。有人可以告诉我一个体面的工作流程来完成这个吗?

4

3 回答 3

9

我遇到过类似的问题,需要处理来自基于 SVN 的开发的多个版本。这是我如何处理它的草图:

# checkout the SVN source
$ svn checkout svn://svnversion/trunk
$ cd /into/svn/checkout

$ git init
$ echo ".svn/" > .gitignore
$ git add .gitignore; git commit -m 'Initial .gitignore'

# Now you have a master branch; create your import-svn branch
$ git checkout -b import-svn

# Add *everything* from the SVN checkout
$ git add -A
$ git commit -m 'Initial SVN'

# Now get the GIT developed stuff
$ git checkout -b import-git master
$ git remote add original-git /path/to/git-developed-repository
$ git pull original-git master         # or whatever branch your git developers used.

# Now you've got two branches 'import-svn' and 'import-git'; DIFF and MERGE as you please

# You don't need the remote anymore.
$ git remote rm original-git

我认为这是对的。

现在你可以考虑合并。如果您将“import-git”视为首选基线,则类似以下内容将起作用。

$ git checkout -b git-merge-svn import-git
$ git diff --name-status import-svn
$ git merge import-svn

你也可以尝试如下的变基,然后决定你喜欢哪个:

$ git checkout -b git-rebase-svn import-git
$ git rebase import-svn

并比较合并和变基(应该是相同的,但你永远不知道..)

$ git diff git-rebase-svn..git-merge-svn
于 2012-04-24T23:24:58.627 回答
1

假设最终回购将是 Git。该解决方案保留了两者的历史

首先在非裸存储库上工作,这对于您想要做的事情更容易。克隆 git 存储库,并从 SVN 创建另一个 git 存储库,使用svn2git.

所以你有两个回购。将一个仓库添加为另一个仓库,并将历史记录导入单独的分支:

git remote add ../other-repo
git fetch other-repo
git branch other-repo other-repo/master

您将收到没有基本提交的警告,因此您将有两个孤立分支

现在您可以合并分支。这应该是可怕的,可怕的,因为它们是相关但完全不同的历史,但是你别无选择。Rebase 在这里是无稽之谈,因为提交是不相关的。

于 2012-04-24T23:31:49.427 回答
1

Microsoft最近有一篇关于该主题的文章,其中包括使用该git-svn实用程序的演练。它们提供有关合并和不合并 svn 更改历史记录的信息。

于 2020-06-16T23:13:10.113 回答