我的企业使用svn作为源代码控制。
我想使用git进行开发(分支非常有用)。
你认为签出一个svn项目没有问题,在我的开发中使用git在本地工作,然后用svn提交最终的更改吗?
当我们这样工作时,有什么特别要知道吗?
答案 0 :(得分:4)
git-svn
很适合我,但你必须准备好一些更高级的功能,如分支(在服务器上)或Subversion外部可能不顺利。在承诺任何事情之前测试您的用例。
答案 1 :(得分:1)
我已经这样做了一年多了,在我习惯了git之后几乎没有问题。需要记住一些警告。
第一个建议是在dcommit之前总是做“git svn dcommit --dry-run”!有时你并没有意识到你实际上是在尝试从不同的分支推送大量的提交,例如在git合并之后。
其次,我通常不会在主分支上工作。我在git分支上工作,然后REBASE到主分支,然后我想把它放在svn中。使用rebase而不是merge,因为svn需要在每个branch / trunk / tag上都有一个“线性历史记录”。另外,了解rebase的作用以及如何摆脱困境(例如rebase --abort)。在开始重新定义之前,我总是做一个“备份分支”。
所以,推进svn,这是我的工作流程:
git checkout master
git svn rebase
git rebase <my_working_branch>
gitk (to review the changes)
git svn dcommit --dry-run
git svn dcommit
答案 2 :(得分:0)
你应该使用git-svn,它几乎可以在任何地方使用并且工作得非常好,即使是非常大的svn repos。在使用git和svn时,我发现以下工作流程很有用。
git svn clone svn+ssh://pathtorepo localname
git branch workingbranch
git co workingbranch ...
... work in branch
git co master
git merge workingbranch
git svn dcommit
通过这种方式,你可以在工作分支中以你想要的方式提交,回滚,拆分,挑选等等,避免了subversion可能带来的复杂git历史记录的所有问题。
如果在svn服务器上发生了某些变化,您只需执行以下操作即可使您掌握所有上游提交(保留主分支中svn的线性历史记录):
git co master
git svn fetch
git svn rebase
然后你可以使用普通的git功能将/ merge / rebase提交到你的工作分支。