我正在使用一份遗留的 svn
代码库。然而,我希望在本地机器上享受 git
的好处。
- 第一种选择是对当前代码库的根目录进行
git init
,编写代码,然后分别进行本地提交(git commit
)和远程提交(svn commit
)。 - 第二种选择是使用
git-svn
,但我不知道是否值得学习一个新工具的微妙之处。
我该怎么做?
我强烈推荐使用git-svn
。我和我的一些同事试图在Subversion上面使用Git仓库,但这是一个充满痛苦和恐惧的过程。
尽管这是针对Subversion 1.6.x的,我认为对于1.7.x来说会更好,因为它只有一个.svn
目录。
从代码库更新需要从Subversion拉取更新,然后使用Git提交。这很慢且繁琐(尽管使用git-svn
也相对较慢,但至少自动化了这个过程)。
此外,你要么需要使用Subversion下载每个提交并手动将其提交到Git,要么就需要将一批Subversion提交提交到Git仓库中,如果你想在Git提交之间处理Subversion版本,则无法完成此操作。
Git不能处理空目录,而Subversion需要空目录作为其.svn
目录的格式。这意味着你需要将.svn
仓库保留在Git仓库外部,因此任何git checkout
操作都需要单独执行svn up
。
正如你所指出的,你需要分别提交所有内容。
因此,分别使用Subversion和Git,你需要在Git和Subversion中执行几乎所有操作。这意味着一切都需要更长时间才能完成,并且你将获得两个系统的所有缺点,同时它们都很擅长破坏彼此的优势。
使用git-svn非常简单。
首先用git svn clone
克隆你的仓库,然后你可以用git svn dcommit
提交你的工作或者用git svn rebase
在最新的更改上进行更新。请确保你的历史始终是线性的,通过将本地分支始终重新设置到主分支上,以便你可以使用git merge --ff-only
合并它们。
最好的方法是迁移到git
并放弃SVN。
然而,如果这不是一个选项,使用git-svn
。
当单独提交到git/svn时,你很可能只会很少地提交到SVN,这将导致其他开发人员最终得到大量提交。