git: 在浅克隆上克隆特定的提交 ID

git: clone specific commit id on a shallow clone

我发现很多 questions/answers 关于克隆存储库和立即检查给定提交 ID 的内容。简单的方法:

git clone <URL> working-copy
cd working-copy; git checkout <COMMIT-ID>

有了分支你就可以git clone -b <BRANCH> <URL>

使用 branches 你也可以做一个浅克隆,这使得克隆速度更快但是你不能再签出任意 ID。

所以我的问题是:有没有一种方法可以对给定的 URL/commit ID 进行浅表克隆,而无需在远程上创建分支?

不同类型的远程仓库有区别吗? (例如本地文件系统、BitBucket、GitHub、GitLab 等)

如果您无法控制服务器,您将无法执行此操作。您可以在私人服务器上禁用一个安全设置以使其正常工作,但推荐。

由于浅层克隆不完整,许多功能在浅层回购中不可用(或者至少不能正常工作)。通常这种技术用于存储库非常短暂的部署处理。

综上所述,在大多数情况下您想要浅克隆单个提交,标签可能就是您要找的东西。 git clone -b 也将接受标签,并且因为它们是不可变的,所以它们将始终解析为相同的提交。

我在过去几年中致力于构建的大多数 CI 系统都使用临时环境的分支和仅用于永久环境的标签。这个系统对我来说效果很好,但只是几个可靠选项之一。