我听说可以在开发者的机器上建立本地Git仓库,同时保留源代码的主副本存储在svn仓库中。
一个很好的用例是你有一个中央svn仓库,每个开发者都与之配合工作。其中一个开发者偶尔会离线并希望跟踪他/她离线时所做的更改。当开发者重新联网并访问svn时,他们的工作副本修改可以被提交到svn中。当文件被提交到svn时,我不介意失去Git本地更改历史记录。
有人能概述一下如何最好地实现这一点吗?这样做有什么注意事项吗?
假设你的SVN仓库在svn+ssh://username@svn_server/svn/your_repo
并且你的SVN仓库有一个“标准”的布局(主干,分支,标签)
以下是我几个月来使用的工作流程:
1. 'mkdir your_repo'
2. 'cd your_repo'
3. 'git svn clone -s svn+ssh://username@svn_server/svn/your_repo .'(注意点号)
4. [根据您的存储库大小等待一段时间:)]
现在你的GIT 'master'跟踪SVN主干
如果您正在某个分支上工作,则可以像通常使用git一样创建跟踪分支
5. 传统的hack hack hack
6. 使用'git svn fetch && git svn rebase'更新克隆
7. 使用'git svn dcommit'将更改“推送”到svn
更多好东西
在您的.gitconfig文件中定义以下便捷别名:
1. 别名 'spull' 代表 svn-pull,如下所示:'spull = !git svn fetch && git svn rebase'
2. 别名 'spush' 代表 svn-push,如下所示:'spush = !git svn dcommit'
这些别名可以让工作流程变得非常有效:
clone/hack hack/spull/spush -> profit
svn:externals
我在互联网上找不到一个好的解决方案,所以自己做了一个 :)
http://github.com/sushdm/git_svn_externals 它还不完美,但肯定会让生活变得更加轻松。
对我来说完美地运行,希望它能帮助到你。
我建议尝试以下解决方案: