$ git clone --depth 1 git@github.com:Seldaek/monolog.git --branch 1.23.0 --single-branch
Cloning into 'monolog'...
remote: Counting objects: 201, done.
remote: Compressing objects: 100% (188/188), done.
remote: Total 201 (delta 42), reused 32 (delta 5), pack-reused 0
Receiving objects: 100% (201/201), 190.30 KiB | 0 bytes/s, done.
Resolving deltas: 100% (42/42), done.
Note: checking out 'fd8c787753b3a2ad11bc60c063cff1358a32a3b4'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
$ cd monolog
4条答案
按热度按时间kqqjbcuj1#
从Git 2.5.0开始(需要在客户端和服务器端都可用),你可以在服务器端设置
uploadpack.allowReachableSHA1InWant=true
来获取特定的SHA1(必须是完整的SHA1,而不是缩写):请注意,我没有找到直接对
git clone
执行此操作的语法。dgtucam12#
注意:我的例子对通过提交哈希克隆没有帮助,但是它有助于克隆一个标签并拥有一个轻量级的存储库。
如果你的“克隆”中只有一个提交,并且你打算使用提交哈希,* 简短的答案是*NO。
我使用以下命令结构(在v2.13.2.windows.1上测试)来标记:
完整示例:
.git
目录大小(* 267 K * 与使用完整clone
时的 2.6M):我想表示,
--branch
可以接受标签/分支。https://git-scm.com/docs/git-clone#git-clone---branchltnamegt
--branch
也可以在结果仓库中的那个提交处获取标记并分离HEAD。UPD
简而言之,它可以接受“refs”。您可以在这里阅读更多内容:git错误消息“Server does not allow request for unadvertised object”是什么意思?
谢谢@BenjiWiebe指出我的错误。
kupeojn63#
尝试在bash中使用
while
:这是相当慢的,因为它单独地获取每个提交;你可以增加增量(批量获取提交并提高网络性能),但这仍然是一种蛮力方法。
aij0ehis4#
直接的答案是:你不能直接用git克隆来做。
为什么?详细的解释可以在这里找到:Why Isn't There A Git Clone Specific Commit Option?
你还能做什么?
如何将仓库克隆到特定的commit?(完全克隆)
更多信息:
如何克隆单个分支?
git clone <url> --branch <branch_name> --single-branch <folder_name>
如何只克隆分支的最新提交?
git clone <url> --depth=1 --branch <branch_name> --single-branch <folder_name>
如何浅克隆深度为1的特定提交?
@sschuberth评论道:
--depth
意味着--single-branch
。使用fetch命令代替clone: