在现有的SVN repo上使用git

时间:2012-06-14 07:48:49

标签: git svn git-svn

我使用遗留svn个回购。但是,我想在本地计算机上享受git的好处。

  • 第一个选项是git init我当前仓库的根,编写代码,并在本地(git commit)和远程(svn commit)独立提交代码。
  • 第二个选项是git-svn,但我不知道是否值得学习新工具细微差别的麻烦。

我应该怎么做?

4 个答案:

答案 0 :(得分:9)

我非常强烈主张git-svn。我和我的一些同事试图在Subversion的顶部使用Git repro,这是一个由痛苦和恐怖组成的过程。

不可否认,这适​​用于Subversion 1.6.x;我怀疑1.7x会更好,因为它只有一个.svn目录。

  • 从存储库更新需要从Subversion中提取更新,然后使用Git提交更新。这是缓慢而乏味的(诚然,git-svn的速度相当慢,但至少会自动化这个过程。)

    另外,要么最终用Subversion下载每个提交并手动将其提交给Git,要么最终将一堆Subversion提交提交给Git存储库,如果你想要工作,$deity会帮助你您的Git提交之间的Subversion修订。

  • Git无法处理空目录,Subversion要求它们的.svn目录格式。这意味着您需要将.svn存储库保留在Git存储库之外,因此任何git checkout操作都需要单独的svn up

  • 正如您所说,您需要单独承诺所有内容。

因此,分别使用Subversion和Git,你需要在Git和Subversion中完成几乎所有操作。这意味着一切都需要更长的时间,而且你会得到两个系统的所有缺点,同时它们都能很好地克服彼此的优势。

答案 1 :(得分:5)

使用git-svn,非常简单。 首先使用git svn clone克隆您的存储库,然后git svn dcommit您的工作或git svn rebase最新更改。通过始终在主服务器上重新定位本地分支,确保您的历史记录始终是线性的,以便您可以将它们与git merge --ff-only合并。

答案 2 :(得分:4)

最好的方法是迁移到git并丢弃SVN。

但是,如果这不是一个选项,请使用git-svn

当单独提交git / svn时,你很可能最终只会很少提交SVN,这会导致其他开发人员以巨大的提交结束。

答案 3 :(得分:2)

您可以尝试SubGit项目。将SubGit安装到SVN存储库中;将创建SVN存储库的纯Git接口(真正的Git,而不是git-svn)。之后,您可以使用两个接口:SVN或Git作为您的存储库。

如果您无法访问SVN服务器,还可以选择另一种选择:SmartGit客户端。它的行为类似于git-svn,但提出了更多功能(标签,忽略,EOL处理,樱桃挑选)。