1

我用 git-svn 从一个大的 svn 存储库(git svn clone)创建了一个存储库。我的 git 存储库中有几个本地提交,我不需要推送到 svn,但我需要从中获取更新。

现在我意识到我不需要本地存储库中的整个 svn 历史记录,因为它使用了太多空间(一些 Gb),我应该在 clone 命令中使用 -r 选项来选择一个起点。

我会从一个新的存储库重新开始,然后合并旧存储库中的所有本地提交,但我不确定是否有一种简单的方法可以做到这一点。

情况是这样的:

旧存储库的日志:

  • 本地提交 10
  • 本地提交 9 ...
  • 本地提交 1
  • svn 修订版 X
  • svn 修订版 X-1 ...
  • svn 修订版 1

新存储库只有一个提交,对应于 svn 存储库的修订 X 的竞争。

我尝试使用格式补丁并应用命令,但我不确定如何执行此操作。

有没有办法做我需要的?

谢谢你的帮助

4

2 回答 2

2

一种方法是,在您的新存储库中:

  • git remote add old您的旧存储库;
  • git fetch old;
  • 结帐包含您想要的分支;
  • 了解更改之前创建分支的起点;
  • 然后使用git rebase --onto.

完成后,git remote rm旧的 repo 和git gc.

查看选项:它非常非常有用git help rebase--onto

于 2011-12-16T16:49:27.077 回答
2

您可以先从 SVN 存储库中检出修订版 X,然后删除所有与 SVN 相关的文件夹。然后git init && git add . && git commit -m "Importing revision X from SVN"。现在你已经有了一个包含 SVN 修订版 X 快照的 Git 存储库。

之后,您可以使用git format-patch旧 Git 存储库创建补丁。git format-patch x..哪里x是与 SVN 中的修订 X 等效的提交。它将生成补丁文件。在旧的 Git 存储库中执行它。

随后,在新存储库中,您可以git am all_those_patches.*将它们应用到新存储库中。

参照。man git-am, man git-format-patch.

于 2011-12-16T16:52:07.633 回答