我正在和一个团队一起做一个项目。他们使用 SVN,但我更喜欢 git。虽然我可以通过简单地提高 SVN 来更轻松地做到这一点,但我宁愿让我的生活变得复杂并使用 Git。
这是他们的设置:
~/www(svn)
| \
trunk(svn) mybranch(svn)
我想拥有
/srv/git/www
有分支trunk和mybranch
当我在 /srv/git/www
中执行 git pull 时在主干分支上,如果脚本在 ~/www/trunk
上运行 svn 更新,我会很高兴并使用任何 svn 提交更新 git 分支(以便 git 历史和提交消息与 svn 和提交消息匹配)
它会在 git pull
上执行相同的行为在 git mybranch 分支上
我的工作流程将是
git checkout trunk
git pull
git checkout mybranch
git rebase trunk
做一些工作
(如果主干自从我 pull 上它后还没有更新):
git commit
git push
git checkout trunk
git merge mybranch
git push
如果 git hook 会在代码被推送到这些分支中的任何一个时触发 svn commit,我会很高兴。
请提供任何建议。我最初只尝试使用 SVN - 但我对它的锁定感到非常沮丧,并且每当 merge 出现问题时都必须重新 checkout ,以至于我对 SVN 感到非常恼火。
如果有人有更好的模型,请告诉我。否则,如果你能指出我如何使用 git 来做这件事,那就太棒了!我知道有一个 git svn 命令,但我不相信它 - 我希望上面的命令更安全(尽管对我来说似乎有点疯狂。)
谢谢!
最佳答案
您已经描述了如何 SubGit作品。从 2.0 开始,它允许使用预接收 Git Hook (在“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(即使它在同一台机器上只是为了使“预接收” Hook 工作)
$ git clone repo.git myproject
$ cd myproject
$ #do something with master
$ git push origin master
从“master”可访问的每个新提交都将被转换为 SVN 中的提交。默认情况下,其他分支也是如此。
关于ubuntu - SVN/Git/bash ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158576/