[译]Git Beyond the Basics: Using Shallow Clones

原文地址: https://www.perforce.com/blog/git-beyond-basics-using-shallow-clones

本文是关于 Git 命令的 6 篇文章中的第 6 篇。

Git 在持续集成(CI)和持续交付(CD)环境中使用时经常会遇到的一个问题就是服务器负载。 因为 Git 的设计包括了一个仓库的每一个克隆都包含它的所有信息,每份克隆保存的不仅 仅是其中的文件,还有每个文件的所有提交过的修改。不难想象这很快会成为增加构建数量、 测试和部署流水线的瓶颈。

幸运的是,Git 支持浅克隆(shallow clone)的概念,它提供了一种更简洁更有意义的方式, 来描述在本地克隆一个仓库时将提交历史截断到一个特定的深度。如果将参数 --depth 1 传递给 clone 命令,就会使得该命令只将仓库中所有文件的最近修改复制到本地仓库。这 成了可能被 CI/CD 自动化过程累垮的 Git 服务器的救命稻草。例如:

1
git clone --depth 1 https://github.com/jquery/jquery.git jquery

上面的命令仅仅克隆了位于 GitHub 上的 jQuery 仓库的当前 HEAD 分支1。做一个不 严格的比较,这个命令在几秒钟内完成了,相比之下在没有指定 depth 开关时克隆整个仓 库用了超过 30 秒,节约了超过 90% 的时间。这一技巧可以极大地减轻需要被自动化过程 频繁拉取的服务器的负载。

用户还应该注意浅克隆在 Git v1.9 之前功能很受限。v1.9 及以后,Git 增加了对浅克隆 的 pull 和 push 操作。这使得在自动化构建操作中,可以对浅克隆的复本做修改、提交并 push 回源仓库。

一般来说,最好是避免这样的工作流,不过至少现在能做到了。 更多细节可以查看 the Git Book documentation

阅读更多

想要关于 Git 命令的更多信息?下面是其他 Git Beyond the Basics 文章,可能会对你有 所帮助:

Footnotes:

1

译注:clone 命令在使用 --depth 选项时,默认使用 --single-branch 选项, 可以使用 --no-single-branch 选项使得 Git 拉取所有分支的指定最近 commit 数量。更多信息参考 the Git Book documentation

Last Updated 2018-08-24 Fri 01:12.
Render by hexo-renderer-org with Emacs 25.2.2 (Org mode 9.1.13)
0%