为什么git不提供克隆参数来指定commitId?

为什么git不提供克隆参数来指定commitId?,git,github,Git,Github,我希望git克隆分支的指定commitId,知道存储库地址、分支和commitId。我还希望使用-branch=master-single branch-depth=1来优化克隆速度 我在谷歌上搜索了一下,发现大多数答案都是克隆该分支的完整提交历史,该分支对于我的项目来说太大了,然后是git checkout commitId 实际上,我更想知道为什么git不提供这样的参数。git clone-commitId=xxxxxxxxx-branch=master-single-branch-dept

我希望git克隆分支的指定commitId,知道存储库地址、分支和commitId。我还希望使用-branch=master-single branch-depth=1来优化克隆速度

我在谷歌上搜索了一下,发现大多数答案都是克隆该分支的完整提交历史,该分支对于我的项目来说太大了,然后是git checkout commitId

实际上,我更想知道为什么git不提供这样的参数。git clone-commitId=xxxxxxxxx-branch=master-single-branch-depth=1 谢谢

git clone的-b或-branch选项不一定是分支名称。例如:

git clone -b v2.29.2 https://github.com/git/git.git --depth 1
很好

基于上述原因,还应允许git clone-b使用或不使用-depth,但不允许:

克隆到“git”。。。 警告:找不到要克隆的远程分支898f80736c75878acc02dc55672317fcc0e0a5a6。 致命:在上游原点中未找到远程分支898f80736c75878acc02dc55672317fcc0e0a5a6 有多种不同的原因不允许这样做,但目前最关键的一个原因是直接访问提交哈希ID可能会违反某种理论上的安全选项,这一点正在被取消,以允许部分克隆直接按ID获取对象。一旦这已经足够普遍,git clone应该学会做上述工作

在此之前,按标签克隆是允许的

请注意:

深度1已经暗示了该标志:浅层克隆默认为单分支克隆。此外,当-b指定一个标记或在理论上将来指定一个原始提交散列时,生成的克隆没有分支并且处于分离头状态,因此指定分支名称没有意义。

git clone的-b或-branch选项不一定是分支名称。例如:

git clone -b v2.29.2 https://github.com/git/git.git --depth 1
很好

基于上述原因,还应允许git clone-b使用或不使用-depth,但不允许:

克隆到“git”。。。 警告:找不到要克隆的远程分支898f80736c75878acc02dc55672317fcc0e0a5a6。 致命:在上游原点中未找到远程分支898f80736c75878acc02dc55672317fcc0e0a5a6 有多种不同的原因不允许这样做,但目前最关键的一个原因是直接访问提交哈希ID可能会违反某种理论上的安全选项,这一点正在被取消,以允许部分克隆直接按ID获取对象。一旦这已经足够普遍,git clone应该学会做上述工作

在此之前,按标签克隆是允许的

请注意:


深度1已经暗示了该标志:浅层克隆默认为单分支克隆。此外,如果-b指定了一个标记,或者在理论上将来指定了一个原始提交散列,则生成的克隆没有分支,并且处于分离头状态,因此指定分支名称没有意义。

如果您想知道为什么,请询问git开发人员。我们怎么知道?那么浅层选项呢?如果你想知道为什么要问git开发者。我们怎么知道?那么肤浅的选择呢?谢谢你的详细回答。我想我现在得去克隆所有历史记录并结帐了。顺便问一下,您提到的近似安全选项是什么?禁止通过散列ID直接访问的一般想法是,某些对象提交,它们的文件可能由于无法从分支或标记名访问而被隐藏。git克隆也不会复制这些对象。但这从未发展成为任何一种严肃的安全模型,新的promisor pack/download loader模型要求通过散列ID直接访问,因此旧的配置标志允许任何需要的散列ID,在较新的协议中不起作用,现在只是自动允许它。另外请注意,如果您可以让拥有源存储库的人标记您想要的提交,您可以按照上面的答案所示,今天通过标记进行克隆。明白了!再次感谢您的详细回答。我想我现在得去克隆所有历史记录并结帐了。顺便问一下,您提到的近似安全选项是什么?禁止通过散列ID直接访问的一般想法是,某些对象提交,它们的文件可能由于无法从分支或标记名访问而被隐藏。git克隆也不会复制这些对象。但这从未发展成为任何一种严肃的安全模型,新的promisor pack/download loader模型要求通过散列ID直接访问,因此旧的配置标志允许任何需要的散列ID,在较新的协议中不起作用,现在只是自动允许它。另外请注意,如果您可以让拥有源存储库的人标记您想要的提交,您可以按照上面的答案所示,今天通过标记进行克隆。明白了!再次感谢