git - 为什么git不提供clone参数来指定commitId?
问题描述
我想让git克隆一个分支的指定commitId,知道仓库地址、分支和commitId。我也想用它--branch="master" --single-branch --depth=1
来优化克隆速度。
我用谷歌搜索了它,发现大多数答案是克隆该分支的完整提交历史记录(这对我的项目来说太大了),然后 git checkout commitId。
我其实更好奇为什么 git 不提供这样的参数。git clone --commitId="xxxxxxxxx" --branch="master" --single-branch --depth=1
谢谢!
解决方案
或选项-b
不一定是分支名称。例如:--branch
git clone
git clone -b v2.29.2 https://github.com/git/git.git --depth 1
工作正常。
由于上述原因,git clone -b <hash-id>
(有或没有--depth
)也应该被允许——但它不是:
Cloning into 'git'...
warning: Could not find remote branch 898f80736c75878acc02dc55672317fcc0e0a5a6 to clone.
fatal: Remote branch 898f80736c75878acc02dc55672317fcc0e0a5a6 not found in upstream origin
有多个单独的原因不允许这样做,但目前的关键一个——即直接访问提交哈希 ID 可能违反某种理论上的安全选项——正在被拆除,以允许部分克隆直接通过 ID 获取对象。一旦这足够普遍,就git clone
应该学会做上述事情。
在那之前,按标签克隆(这是允许的)。
请注意:
--single-branch
标志已经暗示--depth 1
:浅克隆默认是单分支克隆。此外,当-b
指定一个标签(或者,在理论上,原始提交哈希)时,生成的克隆没有分支并且处于分离的 HEAD 状态,因此指定分支名称没有意义。
推荐阅读
- reactjs - 缓慢的数据下载 - 在地图中获取
- entity-framework - Blazor Webassembly - System.AggregateException
- go - 如何将 FaunaDB 的 Time 类型数据映射到 go lang 变量?
- c++ - 具有动态变量的 C++ 模板函数
- lua - 基于另一个计数值,遍历嵌套表 - LUA
- javascript - 如何在变量中获取我发送 discord.js 的消息
- blockchain - Ubuntu 18.04 上的 Hyperledger Indy LibIndy 安装问题
- javascript - 如何使用提交按钮和输入按钮提交值?
- android - 如何为汽车安卓开发应用程序
- r - 粘贴函数以在 r 中添加反斜杠