Xcode Bots不会将git子模块更新为特定的提交

时间:2015-03-20 20:42:10

标签: xcode continuous-integration xcode-bots

我的Xcode Bot正在使用我的repo子模块的过时版本。

尽管子模块在父应用程序的提交历史记录中更新为新版本,但它仍构建旧的子模块代码。

  1. 父级回购使用子模块v1.0。
  2. 父repo将子模块更新到v2.0并将子项目提交提交到github。
  3. " on commit" Xcode Bot会自动为新提交运行。
  4. 将父应用程序上传到TestFlight。
  5. TestFlight构建包含正确的v2.0子模块提交(最后一次提交父代repo)。
  6. 但是,TestFlight构建包含过时的子模块v1.0代码。
  7. 我认为当我的错误在TestFlight版本中可以重现时,我会发疯,尽管已经修复了#34;在子模块和本地构建中。

    事实证明,Xcode Bots没有正确地提取指定的子模块提交。

2 个答案:

答案 0 :(得分:2)

这个问题的一个更简单的解决方案,不需要服务器具有git遥控器的凭证 - 将其添加为机器人的预集成脚本:

#!/bin/sh
# Enumerates each submodule to check out the desired commit.
# Needed because Xcode bots for some reason prefers to check out
# the branch head, which may result in the wrong commit.
cd "$XCS_PRIMARY_REPO_DIR"
git submodule foreach --recursive 'git checkout $sha1'

它以递归方式枚举您的子模块,并检查父级仓库所期望的提交。

答案 1 :(得分:1)

从Xcode 6开始,Xcode Bots不保证将repo的子模块更新为指定的提交。

您需要在Xcode Bot的构建之前手动更新子模块:

git submodule update --init --recursive

为了简化这一点,我已将updateGitSubmodules添加到cavejohnson Xcode Bot脚本工具中。将以下内容添加到Before Integration Run Script阶段以自动更新子模块:

整合之前>运行脚本:

#!/bin/bash
PATH=/Library/Frameworks/Python.framework/Versions/3.4/bin:$PATH

cavejohnson updateGitSubmodules

最后,我们opened an ticket探讨了如何在上游修复此行为。