如何只抓住几个提交与Git捆绑创建

问题描述:

我有一个git仓库,我想用git捆绑命令只抓取一部分仓库。如何只抓住几个提交与Git捆绑创建

可以说在这个回购中有10个提交,但我只想抢第3个?也许稍后再抓住下一个3?等等

我该如何利用git bundle命令来做到这一点?

随时填写我可能没有提供的其他细节上的空白,这可能对您有用。

UPDATE - 合并关于捆绑限制的信息。 tl; dr - 必须在软件包的头部有一个参考

要包含在软件包中的提交使用与用于指定要在log命令(等等)中指定的内容相同的语法来指定,除了必须使用命名参考(分支或标记)来指示应包含的内容。因此,对于你的榜样(捆绑一日3个提交,然后再接下来的3,从回购10个提交):

您有

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

然后回购你说

git bundle create a_to_c.bundle C 

其中C指向C的ref(分支或标签)。后来

git bundle create d_to_f.bundle C..F 

在这种情况下C可以是SHA ID为提交C(或该ID的明确前缀),或者它可以仍是一个重;但F必须是指向提交F的ref(标记或分支)。

这句法工作要任何时候包括从一个犯什么可达(F在这个例子中)除了什么是到达从另一个(C)。等效的命令是

git bundle create d_to_f.bundle ^C F 

其示出了一个更一般的语法,其中,可以很容易地添加到包含或排除多个的提交。

您在评论中注意到您可以使用标签而不是SHA ID进行此项工作。我忘记了 - 但有人向我指出了一个不幸的 - 不清楚的编辑形式 - 是一个捆绑包不能包含悬而未决的提交。包中的每个提交都必须可以从包中的引用获得。我认为这可以防止创建难以访问的悬挂对象,并且在将该捆绑包应用到另一个回购站时,这些对象在任何情况下都将立即符合gc的条件。

+0

当我尝试上述命令时,我收到错误消息:致命:拒绝创建空束。 – Discoveringmypath

+0

我试着用缩短的散列或散列。我可以让它与标签一起工作,但我希望不使用标签 – Discoveringmypath

+1

进行更新,以反映出造成这种混淆的原因。信用尽可能最好 - 我错过了这个(自从我使用捆绑包以来已经很长时间了),并且在提议的编辑中向我指出了这一点。不幸的是,编辑没有很好地整合到答案中,所以我自己重写了它。 –