默认行为和选项
在Travis CI上,默认行为是使用 50 的克隆深度。
TravisCI 文档 git-clone-depth:
git:
depth: 3
# Or remove the --depth flag entirely with:
git:
depth: false
在AppVeyor上,默认是克隆整个存储库。
AppVeyor 提供设置克隆深度和替代shallow_clone: true
选项,其中使用 GitHub 或 Bitbucket API 将提交下载为 zip 存档。(AppVeyor 文档。)
参考 appveyor.yml中的描述:
# fetch repository as zip archive
shallow_clone: true # default is "false"
# set clone depth
clone_depth: 5 # clone entire repository history if not defined
不要在 CI 项目中使用 depth=1!
(clone_)depth: 1
在 CI 平台开始克隆预期的提交之前,当新的提交被推送到分支时,使用通常会导致 git 错误。在 AppVeyor 和 TravisCI 上都有正常的推送操作到 GitHub 上的存储库。
AppVeyor 上结帐失败的示例输出:
Build started
git clone -q --depth=1 --branch=<branch_name> https://github.com/<user>/<repo_name>.git C:\projects\<repo_name>
git checkout -qf 53f3f9d4d29985cc6e56764c07928a25d94477ed
fatal: reference is not a tree: 53f3f9d4d29985cc6e56764c07928a25d94477ed
Command exited with code 128
请注意,没有提取任何特定的提交!
使用 AppVeyors 替代方案shallow_clone: true
:
Build started
Fetching repository commit (6ad0f01)...OK
Total: 781.1 KB in 76 files
我没有看到使用该shallow_clone: true
设置的项目有任何问题。
在旧提交上重新启动构建
使用有限深度时的次要结果是,在旧提交上重新启动 CI 构建将在超出此范围时失败。
建议
shallow_clone: true
如果存储库在 GitHub 或 Bitbucket 上可用,我建议在 AppVeyor 上使用。除非您想对代码执行 git 操作,否则这似乎是最佳选择。
在 TravisCI 上,不设置深度(并使用默认深度 50)似乎是合理的。如果您不想触发历史构建或基于存储库上的流量进行优化,您可以使用不同的值。
克隆依赖项
外部依赖通常由分支或标签引用。当获取分支或标签的尖端被克隆时,使用 git 标志不应该有问题--depth=1
。