2013-01-03 140 views
4

我正在与一个团队合作项目。他们使用SVN,但我更喜欢git。虽然我可以通过简单地改进SVN来更轻松地做到这一点 - 我宁愿让我的生活变得复杂并使用Gi​​t。SVN/Git/Bash

这里是他们设置:

~/www(svn) 
    |  \ 
trunk(svn) mybranch(svn) 

我想有

/srv/git/www 

用树枝树干和mybranch

当我做/srv/git/www而在主干分支内的git拉如果脚本在~/www/trunk上运行了svn更新并且使用任何svn提交更新git分支,我就会喜欢它(这样git历史记录和提交消息S中的SVN匹配,并提交信息)

它会做同样的行为对git pull的混帐mybranch分支

我的工作流程将被

git checkout trunk 
git pull 
git checkout mybranch 
git rebase trunk 

做了一些工作

(如果主干没有被更新,因为我拉它):

git commit 
git push 
git checkout trunk 
git merge mybranch 
git push 

我会喜欢它,如果一个git钩子然后触发svn提交每当代码被推送到任一这些分支。

请提供任何建议。我最初尝试的只是使用SVN--但是因为锁定而感到非常沮丧,并且每当合并不好时我都要重新检出,这让我感到非常恼火。

如果有人有这样做的更好的模型,请告诉我。否则,如果你能指示我如何用git来做到这一点,那将是非常出色的!我知道有一个git svn命令,但我不信任它 - 我希望上面更安全(尽管对我来说似乎有点疯狂)。

谢谢!

+1

他们想要使用svn而不是git,这是疯狂的。但这是另一个故事... –

+12

我不确定你在问什么,但你知道'git-svn'吧?一个工具,让你能够从git访问SVN? – Zoredache

+3

@Zoredache您的评论是我将作为解决这个难题的答案。考虑回答这个问题,这个问题可能会被设置为回答状态。 –

回答

3

您已经描述过SubGit的工作原理。自2.0以来,它允许使用预接收Git钩子(在'git push'上执行)在Git和SVN之间进行双向转换。要做到这一点来看你的机器上

$ subgit configure --svn-url <URL_of_repository_root> repo.git 
$ #adjust repo.git/subgit/{config,passwd,authors.txt} to set auth options, branches to translate and SVN<->Git authors mapping 
$ subgit install repo.git 

然后克隆repo.git(即使是在同一台机器上只是为了让“前接受”挂钩工作)

$ git clone repo.git myproject 
$ cd myproject 
$ #do something with master 
$ git push origin master 

每一个新的承诺,从到达'master'将被转换为SVN中的提交。默认情况下,其他分支也是如此。

3

我最初尝试过使用SVN--但是由于它锁定而感到非常沮丧,并且每当合并不好时我都会重新检出,这让我对SVN感到非常恼火。

我真的没有注意到Subversion有你似乎有问题。我没有经历锁定并与Subversion合并工作很好。事实上,我对Subversion合并的问题少于Git合并。我怀疑你的沮丧之处在于使用不熟悉的软件,而不是Subversion本身的固有问题。我也对软件无法使用的方式感到沮丧。

但是,您可能也可以使用Subversion而不是解决问题。你会一次又一次地碰到Subversion,因为它在软件世界很受欢迎。它使用起来很简单,而且做得很好。在这个世界上,你可能更喜欢OS X和Linux到Windows,但你仍然需要知道Windows。我知道我也对不熟悉的软件感到沮丧。但是,与Windows不同,Subversion并不是邪恶的。此外,它确实工作得很好。

我喜欢关于Git的一件事,我非常想念Subversion,它能够在不影响主存储库的情况下提交我的工作。我在Git的工作流程是这样的:

git checkout 
git pull 
git add 
git commit 
git add 
git commit 
git add 
git commit 
git add 
git commit 
git add 
git commit 
git add 
git commit 
git push 

如果你像我一样的串行提交者,你可能会想尝试Git-SVN:这可以让你使用Git本地工作,做串行提交,但是当你做推并拉,你真的在​​与Subversion版本库交谈。但是,这并不意味着你可以简单地假装你只使用Git。当我分支和合并时,我仍然必须直接与Subversion交谈。

如果你不是系列提交者,那么Git-SVN可能不会给你多少钱。你最终所做的是增加复杂性和更多的挫败感。

Subversion被设计用于不稳定主干模型,用于持续集成环境。这意味着每个人通常都分享同一个分支。它迫使你和其他人一起玩,并且做出小幅度的增量变化。但是,没有理由不能在Subversion中创建自己的私有分支并在那里完成您的工作。

我做了很多代码重组,这意味着要移动文件并做大量的工作,而这些工作在一天内无法完成。我不能在所有其他开发人员正在使用的同一分支上工作,所以我创建了自己的私人分支。如果任何人都应该合并问题,那就是我,因为我不只是在这里或那里修改文件,我正在改变代码的整个布局。然而,Subversion几乎总是以合适的方式处理合并。我定期重新定义。当我完成我的工作时,我会毫无问题地完成大量交付。然后,我会删除我的分支。