Ale*_*ers 5 svn git bash ubuntu
我正在和一个团队一起做一个项目。他们使用 SVN,但我更喜欢 git。虽然我可以通过简单地在 SVN 上变得更好来更轻松地做到这一点 - 我更愿意让我的生活变得复杂并使用 Git。
这是他们的设置:
~/www(svn)
| \
trunk(svn) mybranch(svn)
Run Code Online (Sandbox Code Playgroud)
我想拥有
/srv/git/www
Run Code Online (Sandbox Code Playgroud)
与树枝树干和 mybranch
当我/srv/git/www在主干分支上的while内执行 git pull时,如果脚本运行 svn update~/www/trunk并使用任何 svn 提交更新 git 分支(以便 git 历史记录和提交消息与 svn 和提交消息匹配),我会喜欢它
它会git pull在 git mybranch 分支上执行相同的行为
我的工作流程将是
git checkout trunk
git pull
git checkout mybranch
git rebase trunk
Run Code Online (Sandbox Code Playgroud)
做一些工作
(如果主干自从我拉上它后还没有更新):
git commit
git push
git checkout trunk
git merge mybranch
git push
Run Code Online (Sandbox Code Playgroud)
如果 git 钩子然后在将代码推送到这些分支中的任何一个时触发 svn commit,我会喜欢它。
请提供任何建议。我最初尝试只使用 SVN - 但我对它的锁定感到非常沮丧,并且每当合并出现问题时不得不重新结帐,以至于我对 SVN 非常恼火。
如果有人有更好的模型来做到这一点,请告诉我。否则,如果您能指点我如何使用 git 做这件事,那就太棒了!我知道有一个 git svn 命令,但我不相信它 - 我希望上述更安全(尽管对我来说似乎有点疯狂。)
谢谢!
您已经描述了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
Run Code Online (Sandbox Code Playgroud)
然后克隆 repo.git (即使它在同一台机器上只是为了使“预接收”挂钩工作)
$ git clone repo.git myproject
$ cd myproject
$ #do something with master
$ git push origin master
Run Code Online (Sandbox Code Playgroud)
从“master”可到达的每个新提交都将被转换为 SVN 中的提交。默认情况下,其他分支也是如此。