2011-09-02 104 views
7

我见过有人建议使用git-svn来进行合并并将其提交回svn。如何使用git-svn将更改从trunk中合并到svn中的某个分支?

我正在寻找一个好的一步一步的指导。

  • 这是值得的麻烦,或者我应该使用svn来做到这一点。
  • 人们会看到我使用过git吗?有没有关于svn合并的元数据?
  • 我可以做一个我选择的树干和1个分支的克隆吗?
  • 我需要一个完整的克隆吗?还是我可以从创建分支的地方导入它?
+0

它可以是值得的,它不会看到你使用git而不是svn。尽管如此,你要非常小心地使用'git rebase'。它真的可以让svn历史一塌糊涂。 –

+0

什么样的合并?选定的提交/修订?或者,这是一个功能分支,您希望保持最新的干线提交,意图重新集成到干线? –

+0

有关分步指南:从http://myhumblecorner.wordpress.com/2011/08/25/git-svn-cheatsheet-for-git-rebels-in-an-svn-workplace/ git checkout ; git merge --squash ; git commit; git svn dcommit#--squash是关键' –

回答

3

是否值得麻烦还是应该使用svn来做到这一点。

我认为这取决于您希望在SVN中保留多少信息。如果你使用git进行合并,我相信SVN不会知道这些更改是从哪里来的,换句话说,它看起来像是SVN主干,分支仍然是独立的。

人们会看到我使用过git吗?有没有关于svn中 合并的元数据?

不,它只会看起来像一个新的提交到主干上。

我可以做一个我选择的树干和1个分支的克隆吗?

如果你的意思是克隆你的git-svn到一个新的git仓库,那么是的。只需克隆git-svn并删除多余的分支,或者在克隆之前直接在git-svn repo中执行该操作。

这里是一篇文章如何convert an SVN repo to a git one。我认为大部分情况适用于这种情况。

我需要一个完整的克隆吗?还是我可以从 分支的制造点导入它?

除非使用--depth选项,否则Git克隆通常是完整克隆。如果你想抛弃以前的历史,你可以随时压缩所有提交到一个较旧的提交,或者删除.git目录并初始化一个新的回购。

+2

Git可以使部分克隆看到http://stackoverflow.com/questions/747075/how-to-git-svn-clone-the-last-n-revisions-from-a-subversion-repository – hdorio

+0

@Doud,谢谢你更正。 – cmcginty

1

我已经阅读了一些人的建议这样的文章,但我认为它应该只用于,如果你们都使用GIT和SVN为相同的代码(与git的本地回购和svn托管回购)。我会建议你只是坚持您的VCS并获得像BeyondCompare或万花筒适当合并工具

大约GIT-SVN一个小教程,可以发现在

http://flavio.castelli.name/howto_use_git_with_svn

+0

+1这是一篇不错的博客文章,但它不包括合并。 –

10

我已经使用了这篇文章中的说明,取得了很大的成功。http://justaddwater.dk/2009/03/09/using-git-for-svn-repositories-workflow/

我使用git合并分支,然后将它们提交到svn回购。这不会遵循svn的合并过程,所以这可能是其他用户的问题。没有设置svn:merge属性

git-svn不会在svn回购中留下任何证据表明您正在使用git-svn。

+1

+1到目前为止最好的答案。因为你是戴夫。 –

+0

我想我错过了一些东西。你是否说SVN分支应该在“git branch -a”中显示为git分支?我看到的唯一分支是我创建的分支和“遥控/ git-svn”。 SVN分支仅显示为其目录结构。这些说明让我怀疑SVN是否有服务器端的分支概念,我们在这里没有使用。 – benkc

+0

如果你发现这个,你错过了git clone中的-s选项。 – boutta

相关问题