2010-04-22 154 views
6

我正在使用svn。我有两个分支,他们都进行了很多变化。 此外,其中一个分支很多文件被重命名,所以现在svn不能帮助我合并这些文件中的更改(众所周知的svn限制)。git-svn merge 2 svn分支

  1. 是否有可能使用git-svn来执行分支合并?
  2. 请问git-svn也会重命名文件吗?

感谢

+0

看到这个答案:http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to -help-out-with-svn-merge/3585702#3585702 – 2010-08-27 15:29:01

+0

查看http://stackoverflow.com/questions/714589/can-git-svn-correctly-populate-svnmergeinfo-properties ...“编辑:”部分第二个答案(不是接受的答案)是特别好的 – 2012-01-12 13:13:19

回答

7

git merge应该能够检测(达到一定点)重命名。

recursive

这只能使用3路合并算法解决两个头。
此外,这可以检测并处理涉及重命名的合并。
这是拉动或合并一个分支时的默认合并策略。

但是git-svn只能从/导入/导出到SVN,而不是合并。
并且合并是棘手:

CAVEATS

为了简单起见,用一个能力较少的系统(SVN)互操作,则建议所有git svn用户克隆,提取和dcommit直接从SVN服务器,并避免git存储库和分支机构之间的所有git克隆/拉/合并/推操作。
在git分支和用户之间交换代码的推荐方法是git format-patch和git am,或者只是向SVN存储库传送代码。

运行git merge或git pull不建议在您计划从中提交的分支上。 Subversion不代表任何合理或有用的合并方式;因此使用Subversion的用户无法看到您所做的任何合并。此外,如果您从SVN分支的镜像git分支合并或拉出,dcommit可能会提交到错误的分支。

如果合并,请注意以下规则:混帐SVN dcommit将尝试在SVN的顶部犯

git log --grep=^git-svn-id: --first-parent -1 

提交名为因此,您必须确保最近提交您想要提交的分支是合并的第一个父代。否则就会出现混乱,尤其是如果第一个父代在同一个SVN分支上是较旧的提交。

1

我曾经在大学的一个项目中遇到同样的问题。我所做的是以下几点:

  • 创建一个新的git-svn库(git svn clone -s https://…
  • 合并分支机构,Git的(git checkout master; git merge branch
  • 结账的树干与SVN(svn co https://…/trunk
  • 拷贝过来从git合并的文件
  • 用svn删除剩余的文件和目录(svn rm
  • 提交svn(svn ci
  • 获取Git中新提交
+0

感谢您的有益总结。 git合并是否容易,通过svn执行它更容易吗? (我试图找到这个答案:http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to-help-out-with-svn-merge) – inger 2010-06-05 19:37:32

+0

还有一件事,你是否试图提交给svn?如果是这样,你得到/期待什么问题? – inger 2010-06-05 20:21:32

+0

@inger,没有我与svn合作,以确保我不会推动只有git才能理解的半合并。 – knittl 2010-06-06 17:51:18

0

使用SVN合并功能合并SVN分支,它会更加快速。 这些问题使用Git是相当复杂的,它创造了太多的冲突...