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

Posted

技术标签:

【中文标题】Xcode Bots 不会将 git 子模块更新为指定的提交【英文标题】:Xcode Bots do not update git submodules to specified commit 【发布时间】:2015-03-20 20:42:09 【问题描述】:

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

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

    父 repo 使用子模块 v1.0。 父 repo 将子模块更新到 v2.0 并将子项目提交到 github。 “提交时”Xcode Bot 会自动为新提交运行。 父应用已上传到 TestFlight。 TestFlight 构建包含正确的 v2.0 子模块提交(对父 repo 的最后提交)。 但是,TestFlight 构建包含过时的子模块 v1.0 代码。

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

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

【问题讨论】:

【参考方案1】:

这个问题的一个更简单的解决方案,它不需要服务器为您的 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 预期的提交。

【讨论】:

【参考方案2】:

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

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

git submodule update --init --recursive

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

集成前 > 运行脚本:

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

cavejohnson updateGitSubmodules

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

【讨论】:

不错! cavejohnson 工具看起来也很棒

以上是关于Xcode Bots 不会将 git 子模块更新为指定的提交的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Server Bots 未运行测试

无法在Xcode 10上进行存档

xcode bots 编辑失败

Xcode Bots ::创建存档失败:xcodebuild退出状态为65

手把手教你把 Git 子模块更新到主项目

如何为子模块更新编写 git 提交消息?