16

我使用旧版svn存储库。但是,我想享受git在我的本地机器上的好处。

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

我该怎么办?

4

4 回答 4

11

我会非常强烈地提倡git-svn. 我自己和我的一些同事尝试在 Subversion 之上使用 Git repro,这是一个由痛苦和恐惧组成的过程。

诚然,这是针对 Subversion 1.6.x 的;我怀疑使用 1.7.x 会更好,因为它只有一个.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 中执行几乎所有操作。这意味着一切都需要更长的时间,并且您会得到两个系统的所有缺点,而它们都可以很好地利用彼此的优势。

于 2012-06-14T09:31:53.810 回答
6

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

于 2012-06-14T07:51:57.387 回答
4

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

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

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

于 2012-06-14T07:52:08.257 回答
2

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

如果您无权访问您的 SVN 服务器,还有另一个推荐选项:SmartGit客户端。它的行为类似于 git-svn,但提出了更多功能(标签、忽略、EOL 处理、cherry-picks)。

于 2012-06-15T23:33:36.803 回答