【问题标题】:Import part of a SVN repository into an existing Git repo将 SVN 存储库的一部分导入现有的 Git 存储库
【发布时间】:2013-01-21 20:32:46
【问题描述】:

我有一个现有的 SVN 存储库,我想将其中的一部分以及历史记录导入现有的 Git 存储库。谁能给我一个关于执行此操作所需命令的高级概述?

总结:

  • 我想移动现有 SVN 存储库中的一些子目录(但不移动存储库的其余部分)
  • 我有一个现有的 Git 存储库,我想将这些目录导入到
  • 我只想保留我移动的子目录的历史记录(但不保留其他任何内容)

我感觉这涉及到 git filter-branch 和一些奇怪的合并。任何帮助将不胜感激。

【问题讨论】:

  • 我怀疑导入完整存储库可能更容易,然后使用git filter-branch 删除您不想保留的内容。我不确定是否可以仅以这种方式导入 svn 存储库的一部分,即使可以,也不太可能简单......
  • 您可以使用svnadmin dump 转储Subversion 存储库,然后使用svndumpfilter 过滤掉您不需要的部分。

标签: git svn version-control git-svn svn2git


【解决方案1】:

事实证明这很复杂,但这就是我所做的。

  1. 首先准备 SVN 存储库。之后我打算从 SVN 中删除文件,因此将所有文件放在一个目录中很有帮助(这也使 filter-branch 以后更容易。)

  2. 使用 git 检查了 SVN 存储库:git svn clone http://path/to/svnrepo。这将创建 svn 存储库的 git 版本。

  3. 使用这篇 SO 帖子 Detach (move) subdirectory into separate Git repository 中的想法,我使用 filter-branch --subdirectory-filter 过滤我想要的目录,并从 SVN 中删除我不想保留在 git 中的其他内容的历史记录.也可以使用git subtree这个新功能,如Howto extract a git subdirectory and make a submodule out of it?

  4. 然后,使用这篇 SO 帖子 How do you merge two Git repositories? 中的想法,我将新的 git 存储库导入到我想要添加到的父项目中。接受的答案不正确,请查看该页面上的其他答案;你想做一个git remote add git-proj <path>,然后是一个git pull

  5. 最后,将更改推送到 git 项目。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
相关资源
最近更新 更多