【问题标题】:Missing commits in repo on CircleCI containerCircleCI 容器上的 repo 中缺少提交
【发布时间】:2017-10-19 04:14:58
【问题描述】:

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

我在本地机器和容器上做了git rev-list origin/master 的 diff b/w 输出,发现了很多差异 - 即容器上的 repo 中缺少提交。

我尝试将项目从 Github 克隆到我的本地计算机,它向我显示了相同的 git 提交历史(正确的提交计数),CircleCI 是否在做不同的事情?

【问题讨论】:

  • git rev-list origin/master 的输出无关紧要。如果 CircleCI 构建的修订版是正确的,那就没问题了。 CircleCI 可能有一个浅克隆或一个特定于分支的提取,它不会触及其origin/master
  • 这对我很重要,因为我实际上使用git rev-list --first-parent --count origin/master 的输出作为我的应用程序的版本代码!此外,我确信 CircleCI 正在主分支上构建。
  • 更多信息:我在容器上尝试了git log --reverse,但这不是最初的提交。
  • 那没关系。 origin/master 记录上次同步期间远程存储库中master 的状态。它并不总是远程存储库中master 的当前负责人。本地机器中的 origin/master 与容器中的 origin/master 不同是很正常的,因为它们可以在不同的时刻与远程存储库同步。
  • 1.您的本地计算机同步。远程存储库由某人更新。容器同步。这导致本地机器的提交少于容器。 2.您的本地机器进行了完整克隆,但容器进行了浅克隆,例如--depth=1。然后本地机器比容器有更多的提交。这些是我想到的可能的情况。

标签: android git github continuous-integration circleci


【解决方案1】:

CircleCI 1.0 做了一个浅克隆,这导致了你所看到的。

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

如果您想将 CircleCI 1.0 上的存储库转换为不浅的存储库,以下命令可以解决问题:

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

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

-里卡多·N·费利西亚诺
开发人员布道师,CircleCI

【讨论】:

  • 感谢您的确认和额外的信息!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-03
    • 2013-03-03
    • 1970-01-01
    • 2019-08-22
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多