2009-05-05 58 views
30

我使用保存在svn中的软件进行版本控制。我想使用git(git-svn),但是该软件在使用前需要大量的设置和配置。有些工具可以处理所有的设置,包括通过svn检查所有的代码。将SVN签出转换为使用git(git-svn)

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

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

回答

11

你可以做这样的事情:

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

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

+0

我不关心所有的历史,只是当它检查出svn时的状态,以及svn分支上的未来更改(所以我从调用git-svn rebase得到的) – Jachin 2009-05-05 21:16:22

+3

这不是git的工作原理。 DVCS是“分布式”的,因为每个克隆都是存储库的完整副本。这就是整个问题。 – singpolyma 2009-05-05 21:53:58

1

另一种方式来做到这一点,它不修改原始Subversion工作拷贝,也不需要你复制它,使用补丁:

  1. 使用做你的Subversion树的完整克隆git-svn,到一个将成为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存储库的工作树上。

现在,你可以通过使用git status的变化,和git add/git commit它们,将它们保存在您的本地仓库。