使用git-svn相比于git的优点很明显(svn兼容性),但是git相对于git-svn有哪些优点呢?
git bundle
导出Git存储库)。git-svn
和git
在本地工作时具有相同的功能。区别在于从远程仓库发送或接收修改时。
Push vs. dcommit.
为什么git-svn
需要单独的dcommit
命令?
因为Subversion仓库与远程Git仓库的行为不同:SVN始终尝试在目录级别上合并传入的更改。如果一个用户同时修改了另一个用户修改的文件,SVN会拒绝传入的修改,并显示“过期”错误。否则,commit
/dcommit
将通过。
与此相反,当一个人修改相同的分支/标签时,Git push
会返回“过期”错误,无论哪些文件被修改。
因此,git-svn dcommit
必须确保它刚提交的版本与它所期望的版本相同(某些目录可能在dcommit
期间自动合并)。这意味着,git-svn
总是拉取/获取它刚刚发送到SVN存储库的更改。
文件忽略。
当一个人在工作树中忽略某些文件并提交此修改时,没有办法使用git-svn dcommit
发送此修改。因此,没有办法与其他SVN仓库用户共享忽略。
Git属性。
Subversion和Git都有与文件和目录相关联的某些元数据。类似于.gitignore,没有办法与同事共享.gitattributes。
合并提交。
最后,当一个人尝试dcommit
合并提交时,有可能某些提交根本不会发送到SVN存储库。当合并分支的所有提交尚未dcommit到SVN存储库时,就会发生这种情况。
git-svn
问题大多数很难甚至无法解决。您可以考虑使用SubGit——一种服务器端替代git-svn
的工具,它可以解决其中的大部分问题。