Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git和SVN通过Git SVN分支合并。哪种程序最好?_Git_Svn_Merge_Branch_Dcommit - Fatal编程技术网

Git和SVN通过Git SVN分支合并。哪种程序最好?

Git和SVN通过Git SVN分支合并。哪种程序最好?,git,svn,merge,branch,dcommit,Git,Svn,Merge,Branch,Dcommit,我正在使用git svn在git和svn之间同步源代码。我喜欢与分支机构合作,这就是问题所在 我正在使用:git svn branch mybranch创建一个分支 在那之后,我检查了分行。修改源代码后,我准备将mybranch合并到主分支 你是怎么做到的?git merge不起作用,git merge--no ff创建一个提交。您是否使用cherry pick来选择这些提交?如何在不丢失在mybranch中创建的提交的情况下将更改从mybranch集成到master 多谢各位 SVN中的分支和

我正在使用git svn在git和svn之间同步源代码。我喜欢与分支机构合作,这就是问题所在

我正在使用:git svn branch mybranch创建一个分支

在那之后,我检查了分行。修改源代码后,我准备将mybranch合并到主分支

你是怎么做到的?git merge不起作用,git merge--no ff创建一个提交。您是否使用cherry pick来选择这些提交?如何在不丢失在mybranch中创建的提交的情况下将更改从mybranch集成到master


多谢各位

SVN中的分支和合并与Git中的分支和合并明显不同。Git的要高得多。SVN无法处理git所做的大多数合并。以下是我建议的合并方式:

案例1)创建个人特征分支,然后将其合并回共享SVN分支

在这种情况下,仅在Git中创建功能分支。在git中根据需要提交。如有必要,可以随时重新设置基础/挤压。准备将更改合并回SVN共享分支时:

案例1a)您希望所有单独的提交都存储在SVN中

重新设置功能分支的基础,使其所有提交都位于共享分支的尖端之后。然后快进将要素分支合并到共享分支中。这将在SVN共享分支中留下一个线性历史记录。这很重要。SVN不能处理非线性历史。现在您可以将共享分支推送到SVN(请确保首先从SVN更新)

案例1b)您只希望在SVN历史记录中进行一次提交

在本例中,执行合并--挤压。这将向您的共享分支添加一个提交,您可以将其推送到SVN。您的功能分支应该被删除(如果您想在git历史记录中保留单独的提交,可以用标记替换),因为git没有合并的历史记录,将来从分支进行的合并可能会导致不必要的冲突

案例2)您需要合并两个SVN分支

始终在SVN中合并SVN分支,而不是Git!SVN无法处理Git合并。如果您在Git中合并,SVN将无法在将来合并这些分支而不会出现问题。如果SVN进行了合并,Git应该仍然能够检测到合并

或者,您可以在Git中进行所有合并。由于SVN对这些合并一无所知(它不知道提交是合并提交),因此SVN将无法在没有大量手动干预的情况下合并这些分支。SVN使用“mergeinfo”跟踪哪些提交已经应用于哪些分支,在Git中进行合并不会更新SVN的mergeinfo。因此,您可以选择始终在SVN中合并SVN分支,或者始终在Git中合并SVN分支

git checkout myfeature
git rebase master    # we need a linear history on master, so rebase
git checkout master
git merge myfeature --ff-only  # ff-only ensures a linear history
git svn rebase  #update from SVN
git svn dcommit #finally, commit to SVN