2010-06-10 55 views
1

我正在做一个实习,他们正在使用SVN(虽然已经有一些关于移动到hg或git的讨论,但这不是在不久的将来)。我喜欢git,因此我想使用git-svn与svn存储库进行交互,并能够执行本地提交和分支以及类似的东西(当然,在交付svn之前重新绑定)。然而,有一个轻微的皱纹,svn存储库布局有点奇怪。基本上,它看起来像这样使用git-svn与稍微奇怪的svn布局

/FOO 
    +-branches 
    +-tags 
    +-trunk 
    +-FOO 
    +-myproject 

基本上,我的项目一直停留到躯干的子目录,还有另外一个项目,也是后备箱的子目录。如果我使用git-svn并且只克隆我的项目而不是根目录,它会混淆或导致任何问题吗?我只是想知道,因为提交数字是为整个存储库增加的,而不仅仅是我的项目,所以提交会失败或类似的东西?我可能不会将任何分支或标签推送到SVN,因为我更喜欢在git本地执行这些操作,而且我不知道git-svn如何处理分支和标签,并且没有其他人使用它们,所以我发现这样做的意义不大。谢谢您的帮助!

回答

1

我在一个多项目多平台svn回购中使用git-svn。

我通常只是直接在我感兴趣的svn repo目录上找到本地git repo,并放弃对分支机构等的本地支持,尽管我听到关于支持越来越好的好消息。在git-core文档中似乎有git svn分支支持。

我做的方式:

git svn init http://repo.farts.com/svn/path/to/the/directory/of/project 
git svn fetch 

而当它的时间来提交...

git stash 
git svn rebase 
git stash pop 
git commit -am "Some really awesome stuff" 
git svn dcommit 

我已经与这个没有问题。如果您已重新绑定到的代码发生了更改,则弹出存储启动合并。 Rebase保持历史线性。有可能是一个更好的方式来做到这一点,但我幸存下来,以上过程加上git mergetool。

您还可以查看git svn附带的自定义布局选项,以指定干线,分支和标记之间的相互关系。你可以用-T trunk -b分支-t标签分别指定它们中的每一个,默认情况下它们是相对的,但是你可以提供绝对路径。

另外,作为一个建议的话,我个人只是根据实习的敏感性来使用SVN客户端。我不是一个好的公民的成员说这个,但源代码控制可以是一个重大的痛苦的屁股,也是人民的圣地 - 如果它给任何人造成一个单一的不便,它的几乎不值得。话虽这么说,如果你能保持独立,不负担任何与你的工具的选择,幸福git'ing ;-)

乔希

+0

嗯,这似乎是我想做的事情。我问这个问题的唯一原因是因为在git-svn的专业版书籍部分,他说了一些关于svn如果在上次推送和当前推送之间发生提交时可以提交的问题,只要您没有碰到任何提示修改过的文件,但混帐由此,所以我想也许这会导致问题,如果我只检出一个子目录。看起来你虽然做得很好。 我不认为他们真的关心我使用git;我的导师实际上说他可能希望我解释git,因为他们最终可能会转向DVCS – Ibrahim 2010-06-11 16:28:03