6

可能重复:
如何 git-svn 从 Subversion 存储库克隆最后 n 个修订?

我正在尝试将托管在大型 WordPress 插件仓库中的 WordPress 插件移至 Git。

我厌倦了使用git-svn并且花费的时间太长(单个插件超过 4-5 小时)并且我有将近 20 个插件要迁移。

我的机器上有已签出的 SVN 存储库。.svn有什么方法可以让我们只使用存储在文件夹中的历史信息而不连接到 SVN 服务器将 SVN存储库导入 Git ?

4

3 回答 3

8

您的机器上没有 SVN存储库。你有一个工作副本

与 Git 不同的是,SVN 在检出工作副本时不会下载整个存储库以及整个历史记录。它只是下载文件的最新版本。

所以不,从工作副本中获取 SVN 项目的历史是不可能的。

于 2012-12-29T16:43:04.017 回答
3

TL;博士

不,但是,您有一些选择。

Git 和 SVN 历史

Git 和 SVN 处理历史的方式完全不同。当您签出 SVN 存储库时,.svn 目录仅保存最近的提交,以便可以将其与工作目录进行比较或还原。

另一方面,Git 克隆了整个历史。有某些例外,例如浅克隆,但对于大多数用途,Git 需要一个完整的存储库来执行诸如显示历史记录或计算差异之类的事情。

If you don't mind a truncated history, you can look at the --depth or --revision flags for git-svn. These flags will allow you to limit the number of revisions you retrieve from the SVN repository, trading history and functionality for speed.

However, while you could import your SVN working copy as a new Git repository, the .svn directories don't hold any actual history. You must connect to the SVN repository to access the history, so you can't import from a working copy.

Mirror Subversion First

However, you might consider mirroring the Subversion repository and then running git-svn locally against your mirror. You will still need a complete copy of your SVN repository, but mirroring the repository takes less time than retrieving Subversion commits one at a time over a network connection with git-svn.

请注意,您仍然无法做您想做的事,但这是提高 SVN->Git 迁移速度的另一个可行替代方案。除了速度提升之外,这还将在 Git 方面产生更完整的历史记录。

于 2012-12-29T16:55:21.293 回答
1
  1. .svn工作副本中的 dir 不包含 repo 的完整历史记录,仅包含 WC 中数据的“原始副本”(以及一些额外的元数据) - 如果不与 repo 交互,您将无法获得完整的历史记录
  2. 如果你想更快地完成过程,你可以尝试这样做,以本地磁盘空间为代价

建议的工作流程可能是这样的:

  • 获取本地(文件:/// 到达)SVN-repos,由插件分隔(一个插件 - 一个 repo)。这样,您将获得(在转换阶段)对源数据的最快访问,并且无需过滤来自存储库的不相关(对于已处理的插件)部分的提交。用于准备清洁svnadmin dump| svndumpfilter的垃圾场。svnrdump | svndumpfilter可能,一个完整的 svnrdump 并稍后过滤它cat DUMP| svndumpfilter include会更加省时;
  • 导入上一步准备好的 Git 小仓库。
于 2012-12-29T17:00:34.490 回答