32

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

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

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

4

4 回答 4

14

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

于 2009-05-05T20:59:14.933 回答
11

你可以这样做:

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

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

于 2013-08-08T17:21:42.243 回答
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 存储库的工作树上。

现在您可以使用git status, 和git add/git commit它们浏览更改以将它们保存在本地存储库中。

于 2011-08-31T11:08:22.040 回答