转换SVN结帐以使用git(git-svn)

时间:2009-05-05 20:52:48

标签: git svn git-svn git-checkout svn-checkout

我使用svn中保存的软件进行版本控制。我想使用git(git-svn),但软件需要大量的设置和配置才能使用。有些工具可以处理所有设置,包括通过svn检查所有代码。

git-svn的所有文档(我已经能够找到)需要使用git-svn进行全新的结账。

有没有办法转换现有的svn checkout以便它可以使用git-svn?

4 个答案:

答案 0 :(得分:14)

没有。 git-svn克隆将整个存储库转换为git。 SVN签出没有整个存储库,因此无法克隆。这是从SVN或CVS切换到分布式系统(如git)的主要优势。

答案 1 :(得分:11)

你可以这样做:

  1. 使用git-svn将SVN树完全克隆到临时目录。确保使用与现有结帐完全相同的修订版。
  2. 将“.git”文件夹从git-svn checkout的顶层移动到SVN checkout的顶层。
  3. 然后你要么告诉Git忽略“.svn”目录,要么全部删除它们。
  4. 删除git-svn checkout。
  5. 现在,您可以使用Git和git-svn操作现有文件。
  6. 做一个“git status”并希望它说没有变化。

答案 2 :(得分:4)

我想你可能想保留历史。但是,如果您(或在此页面上偶然发现的任何其他人)不需要历史记录,您可以使用“导出”功能,如下所述:https://stackoverflow.com/a/419475/2437521

答案 3 :(得分:1)

另一种方法是使用补丁:

,它不会修改原始的Subversion工作副本,也不需要你复制它。
  1. 使用git-svn将Subversion树完全克隆到一个新目录,该目录将是Git存储库。确保使用与现有结帐完全相同的修订版。您可以使用git reset --hard :/r<revision>强制它在克隆后成为相同的修订版,其中<revision>是Subversion工作副本更新到的修订版(在此处使用svn info查看)。
  2. cd到您的Subversion工作副本。
  3. 使用svn status确保所有新文件都标有A(或使用svn add添加),所有已删除的文件都标有D(或使用svn rm删除它们。)
  4. 运行svn diff >patch.diff以创建补丁文件。
  5. patch.diff复制到之前创建的Git存储库的顶部。
  6. cd到之前创建的Git存储库的顶部。
  7. 运行git apply -p0 patch.diff以在Git存储库的工作树上应用补丁。
  8. 现在,您可以使用git statusgit add / git commit来更改这些更改,以将其保存在本地存储库中。