我有一项艰巨的任务,就是将一个站点与两个团队之间的大量文件合并.一个团队一直在努力git
,一个使用svn
.我能帮助你找到最好的解决方法吗?我在想的是我将创建一个新的裸仓库
git clone --bare ~/dir gitversion.git
Run Code Online (Sandbox Code Playgroud)
然后从那里创建一个分支
git checkout -b import-svn
Run Code Online (Sandbox Code Playgroud)
然后在那个分支上我将从svn拉出来
svn checkout svn://svnversion/trunk
Run Code Online (Sandbox Code Playgroud)
现在在这个分支上,我会改变吗?
git rebase origin/master
Run Code Online (Sandbox Code Playgroud)
然后切换回主分支
git merge import-svn
Run Code Online (Sandbox Code Playgroud)
我试过这样的事情,但似乎无处可去.从来没有任何合并冲突或任何没有意义的事情.有人可以告诉我一个体面的工作流程来完成这个吗?
我遇到过类似处理来自基于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
Run Code Online (Sandbox Code Playgroud)
我认为那是对的.
现在你可以考虑合并了.如果您将'import-git'视为首选基线,则以下内容将起作用.
$ git checkout -b git-merge-svn import-git
$ git diff --name-status import-svn
$ git merge import-svn
Run Code Online (Sandbox Code Playgroud)
你也可以尝试像下面这样的rebase,然后决定你喜欢哪个:
$ git checkout -b git-rebase-svn import-git
$ git rebase import-svn
Run Code Online (Sandbox Code Playgroud)
并比较合并和rebase(应该是相同的,但你永远不会知道..)
$ git diff git-rebase-svn..git-merge-svn
Run Code Online (Sandbox Code Playgroud)