在现有的SVN代码库中使用git

18

我正在使用一份遗留的 svn 代码库。然而,我希望在本地机器上享受 git 的好处。

  • 第一种选择是对当前代码库的根目录进行 git init,编写代码,然后分别进行本地提交(git commit)和远程提交(svn commit)。
  • 第二种选择是使用git-svn,但我不知道是否值得学习一个新工具的微妙之处。

我该怎么做?

4个回答

12

我强烈推荐使用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中执行几乎所有操作。这意味着一切都需要更长时间才能完成,并且你将获得两个系统的所有缺点,同时它们都很擅长破坏彼此的优势。


6

使用git-svn非常简单。 首先用git svn clone克隆你的仓库,然后你可以用git svn dcommit提交你的工作或者用git svn rebase在最新的更改上进行更新。请确保你的历史始终是线性的,通过将本地分支始终重新设置到主分支上,以便你可以使用git merge --ff-only合并它们。


5

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

然而,如果这不是一个选项,使用git-svn

当单独提交到git/svn时,你很可能只会很少地提交到SVN,这将导致其他开发人员最终得到大量提交。


6
如果他写道“我正在使用一个遗留的svn存储库”,那么放弃它可能并不是一个真正可行的选择。 - cyberz
迁移到Git是唯一真正好的选择,再加上类似GitLab这样的东西。任何使用过Git后又不得不回到SVN的人都知道它会带来回报。我会尽力说服大家采用Git。如果不这样做,那么你就被迫使用糟糕的选项。 - sigvaldm

2
你可以尝试使用SubGit项目。将SubGit安装到你的SVN仓库中,这将创建一个纯Git接口(真正的Git,而不是git-svn)用于SVN仓库。之后,你可以同时使用SVN或Git接口来管理你的仓库。
如果你无法访问你的SVN服务器,还有另一个推荐的选择:SmartGit客户端。它类似于git-svn,但提供了更多功能(标签、忽略、EOL处理、cherry-picks等)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接