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 子模块更新为指定的提交的主要内容,如果未能解决你的问题,请参考以下文章