3

我的 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 代码。

尽管在子模块和本地构建中已“修复”,但当我的错误在 TestFlight 构建上可重现时,我以为我快疯了。

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

4

2 回答 2

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'

它递归地枚举您的子模块并检查父 repo 期望的提交。

于 2017-06-20T10:58:15.617 回答
1

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

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

git submodule update --init --recursive

为了使这更容易,我已将其添加updateGitSubmodulescavejohnsonXcode Bot 脚本工具中。将以下内容添加到集成前运行脚本阶段以自动更新子模块:

集成之前 > 运行脚本:

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

cavejohnson updateGitSubmodules

最后,我们打开了一张票来探索如何在上游修复这种行为。

于 2015-03-20T20:42:09.733 回答