5

我正在和一个团队一起做一个项目。他们使用 SVN,但我更喜欢 git。虽然我可以通过简单地在 SVN 上变得更好来更轻松地做到这一点 - 我更愿意让我的生活变得复杂并使用 Git。

这是他们的设置:

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

我想拥有

/srv/git/www 

用树枝树干和 mybranch

当我在主干分支的 while 内执行 git pull时,如果脚本运行 svn update并使用任何 svn 提交更新 git 分支(以便 git 历史记录和提交消息与 svn 和提交消息匹配),/srv/git/www我会喜欢它~/www/trunk

git pull它会在 git 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 hook 会在代码被推送到这些分支中的任何一个时触发 svn commit,我会喜欢它。

请提供任何建议。我最初尝试只使用 SVN - 但对它的锁定感到非常沮丧,并且每当合并出错时都必须重新结帐,以至于我对 SVN 非常恼火。

如果有人有更好的模型来做到这一点,请告诉我。否则,如果您能指出如何使用 git 来做这件事,那就太好了!我知道有一个 git svn 命令,但我不相信它 - 我希望上面的内容更安全(尽管对我来说似乎有点疯狂。)

谢谢!

4

2 回答 2

4

您已经描述了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 中的提交。默认情况下,其他分支也是如此。

于 2013-01-04T20:47:31.803 回答
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 几乎总是从容应对合并。我定期变基。当我完成我的工作时,我会毫无问题地进行大规模交付。然后,我将删除我的分支。

于 2013-01-04T16:50:28.870 回答