在CircleCI容器上缺少repo中的提交

时间:2017-05-19 06:43:14

标签: android git github continuous-integration circleci

我使用CircleCI构建Android Github私有项目。构建工作正常,但容器上origin/master的提交历史记录与我在本地计算机上的提交历史记录不同。

我在我的本地机器和容器上做了git rev-list origin/master的差异输出,发现了很多不同之处 - 即容器上的回购中缺少提交。

我尝试将项目从Github克隆到我的本地机器,它向我展示了相同的git提交历史记录(正确的提交计数),CircleCI做了哪些不同的事情?

2 个答案:

答案 0 :(得分:5)

CircleCI 1.0执行浅层克隆,这会导致您看到的内容。

在克隆回购之前,CircleCI会检查“源缓存”是否可用。如果是,则使用它来重新创建.git/。然后,在CircleCI 1.0上,完成浅层克隆。在CircleCI 2.0(测试版)中,完成了标准克隆。然后,完成工作以获得正确的提交/标记。

如果要将CircleCI 1.0上的存储库转换为unshallow存储库,则以下命令可以解决这个问题:

"[[ ! -s \"$(git rev-parse --git-dir)/shallow\" ]] || git fetch --unshallow"

在1.0上,源缓存在dependencies阶段之后保存,因此我建议不要在该阶段之后执行此操作,以便可以有效地保留缓存。对于2.0,它在save_cache步骤运行时保存。

-Ricardo N Feliciano
开发者传播者,CircleCI

答案 1 :(得分:1)

正如@ElpieKay在评论中提到的,这与CircleCI浅层克隆回购有关。有关完整克隆,请参阅https://github.com/prontolabs/pronto/issues/103 for circle.yml config。例如,我做了:

checkout:
    post:
        - "[[ ! -s \"$(git rev-parse --git-dir)/shallow\" ]] || git fetch --unshallow"