如何使用 Git bundle create 仅获取前几个提交

how to grab only first few commits with Git bundle create

我有一个 git 存储库,我想使用 git 捆绑命令只获取存储库的一部分。

假设这个 repo 中有 10 个提交,但我只想获取前 3 个?也许稍后再拿下 3 个?等等

如何利用 git 捆绑命令来执行此操作?

请随意填写我可能没有提供的其他详细信息,这可能对您有用。

UPDATE - 包含有关捆绑包限制的信息。 tl;dr - 你必须在 bundle 的头部有一个 ref

要包含在包中的提交使用与指定要在 log 命令(以及其他)中看到的内容相同的语法来指定,但必须使用命名 refs (分支或标签)以指示应包含的内容。因此,对于您的示例(捆绑第一个 3 个提交,然后是下一个 3 个,来自具有 10 个提交的回购):

你有一个仓库

A -- B -- C -- D -- E -- F -- G -- H -- I -- J <--(master)

那你说

git bundle create a_to_c.bundle C

其中 C 指向 C 的引用(分支或标记)。后来

git bundle create d_to_f.bundle C..F

在这种情况下,C 可能是提交 C 的 SHA ID(或该 ID 的明确前缀),或者它可能仍然是 re;但 F 必须是指向提交 F.

的引用(标记或分支)

只要您想 包括 一次提交可达到的内容(本例中为F),此语法在任何时候都有效[=45=除外] ] 可以从另一个 (C) 访问什么。等效命令是

git bundle create d_to_f.bundle ^C F

它显示了更通用的语法,您可以在其中轻松添加要包含或排除的多个提交。

您在评论中指出,您可以使用标签而不是 SHA ID 使其工作。我忘记的是——但有人以不幸的是——不清楚的编辑形式向我指出——是一个包不能包含悬空提交。 bundle 中的每个提交都必须可以从 bundle 中的 ref 访问。我想这可以防止创建难以访问的悬垂对象 - 并且在任何情况下都会立即符合 gc 条件 - 当将捆绑包应用到另一个 repo 时。