2

背景

我正在尝试将包从 SVN 存储库移动到 GIT 存储库,同时保留它的历史。

步骤

  • 我曾经git-svn为 SVN 生成一个 GIT 存储库。
  • 我正在按照此处提到的步骤将代码从一个 GIT 存储库移动到另一个,同时保留历史记录。

我想将该包移动到目标 git 存储库中它自己的子目录中。但是,我被困在这一步:git pull <remote> master --allow-unrelated-histories

这会将代码拉入顶级 git 目录。我如何将该代码拉入子目录?

我根据一些 SO 答案尝试了以下方法,但没有奏效:

  • git pull -work-tree <working_dir> -git-dir <working_dir> <remote> master
  • git pull -s subtree -Xsubtree=<path_prefix> <remote> master

清理步骤:

该软件包将在目标 GIT 存储库中维护,因此我打算:

  • 从 SVN 存储库中删除它。
  • 并且,还要删除中间的 GIT 存储库,一旦包被移动就不需要它了。
4

2 回答 2

1

如果您想将该 SVN 历史记录导入到它自己的子文件夹中,则需要将其导入到它自己单独的 git 存储库中。

那么你也能

于 2017-11-26T13:59:08.123 回答
1

您引用的那个链接与SVN没有任何关系。

无论如何,一次性迁移git-svn不是转换存储库或存储库部分的正确工具如果您想使用 Git 作为现有 SVN 服务器的前端,这是一个很棒的工具,但对于一次性转换,您不应该使用git-svnsvn2git它更适合这个用例。

有很多称为svn2git的工具,可能最好的是来自https://github.com/svn-all-fast-export/svn2git的 KDE 工具。我强烈建议使用该svn2git工具。这是我所知道的最好的,并且在你可以用它的规则文件做什么方面非常灵活。

您将能够轻松配置svn2gits 规则文件以从当前 SVN 布局中生成所需的结果,包括可能存在的任何复杂历史,包括从一个 SVN 存储库中生成多个 Git 存储库或将不同的 SVN 存储库合并到一个 Git 中如果您愿意,可以一次性干净地回购。

如果您不是 100% 了解存储库的历史,那么在将 SVN 存储库迁移到 Git 时,svnevereverhttp ://blog.hartwork.org/ ?p=763是一个很好的工具来调查 SVN 存储库的历史。


尽管git-svn更容易开始,但除了灵活性之外,还有一些使用 KDEsvn2git而不是更优越的原因:git-svn

  • 通过(如果使用正确的),历史被重建得更好,更清晰,svn2git对于具有分支和合并等的更复杂的历史尤其如此
  • 标签是真正的标签,而不是 Git 中的分支
  • 标签包含git-svn一个额外的空提交,这也使它们不是分支的一部分,因此在fetch您提供命令之前,正常情况下不会获取它们,--tags因为默认情况下也只会获取指向已获取分支的标签。使用正确的 svn2git 标签是它们所属的地方
  • 如果您更改了 SVN 中的布局,您可以轻松地配置它svn2gitgit-svn最终您将失去历史
  • 您还可以轻松地svn2git将一个 SVN 存储库拆分为多个 Git 存储库
  • 或轻松将同一个 SVN 根目录中的多个 SVN 存储库合并到一个 Git 存储库中
  • svn2git正确的转换比使用正确的要快无数倍git-svn

你看,有很多原因导致git-svnKDE 更差而 KDEsvn2git更胜一筹。:-)

于 2017-11-26T23:20:45.603 回答