Xcode bot:git子模块未初始化

Xcode bot:git子模块未初始化,xcode,git,git-submodules,osx-server,xcode-bots,Xcode,Git,Git Submodules,Osx Server,Xcode Bots,我正在尝试用OSX服务器设置一个Xcode机器人。 配置git存储库并创建bot之后,我运行integrate。 它失败,因为存储库仅部分签出。更准确地说:在配置的6个子模块中,只有3个子模块被初始化和签出 didi@mac:/Library/Server/Xcode/Data/BotRuns/Cache/c5fda8f4-4d25-4d25-c18a-eb0b16a06692/source$ git submodule status +c6e8420aec4147641fb1ca12d9f1d

我正在尝试用OSX服务器设置一个Xcode机器人。 配置git存储库并创建bot之后,我运行integrate。 它失败,因为存储库仅部分签出。更准确地说:在配置的6个子模块中,只有3个子模块被初始化和签出

didi@mac:/Library/Server/Xcode/Data/BotRuns/Cache/c5fda8f4-4d25-4d25-c18a-eb0b16a06692/source$ git submodule status
+c6e8420aec4147641fb1ca12d9f1d31bdd804e77 libs/asi-http-request (v1.7-320-gc6e8420)
-ae64a38766b42f236bb94f0e661cddb829f9ac43 libs/kraken
-7da02b323636bbaa0bbbf5b4eb229fcc07b1e14a libs/route-me
 152f9ee5576e710705a49032253d7d5af5366f9c libs/routing (152f9ee)
 347aaf74fe0c6388785095efdbf6397851514b7f libs/rtlabel (1.0-32-g347aaf7)
-562cf6b1c879f03546f5184e012cea15c4f159db libs/skmaps
(-表示未初始化)

查看bot日志,似乎忽略了子模块初始化部分中缺少的子模块:

...
Checking connectivity... done
Submodule 'libs/asi-http-request' (https://github.com/BikeCityGuide/asi-http-request.git) registered for path 'libs/asi-http-request'
Submodule 'libs/routing' (ssh://mac_ci@rooty.bikecityguide.org/var/repos/librouting.git) registered for path 'libs/routing'
Submodule 'libs/rtlabel' (https://github.com/BikeCityGuide/RTLabel.git) registered for path 'libs/rtlabel'
Cloning into 'libs/asi-http-request'...
...
这里或其他任何地方都没有错误消息。日志中没有任何地方提到例如“kraken”(缺失子模块的名称)

手动签出(克隆、子模块初始化、子模块更新)时,所有子模块都将初始化

.git模块如下所示:

$ cat .gitmodules 
[submodule "libs/asi-http-request"]
    path = libs/asi-http-request
    url = https://github.com/BikeCityGuide/asi-http-request.git
[submodule "libs/rtlabel"]
    path = libs/rtlabel
    url = https://github.com/BikeCityGuide/RTLabel.git
[submodule "libs/routing"]
    path = libs/routing
    url = ../librouting.git
[submodule "libs/kraken"]
    path = libs/kraken
    url = ../kraken_ios.git
[submodule "libs/route-me"]
    path = libs/route-me
    url = ../route-me.git
[submodule "libs/skmaps"]
    path = libs/skmaps
    url = ../skmaps.git
基本存储库和使用相对URL引用的4个子模块存储库都需要ssh身份验证。在OSX服务器中设置的用户可以访问所有这些文件。 bot的日志中没有试图拉取丢失的子模块的痕迹

我可以手动修复本地存储库,但我不希望在添加新项目和新子模块时再次出现同样的问题

git版本1.8.4.2

我没有主意了。

我明白这是个错误。 我也有同样的问题,发现分离的子模块存在问题。 请参阅下一篇介绍如何解决此问题的文章(对公共存储库没有帮助)


希望这对您有所帮助。

在Xcode 6.1.1和OS X Server 4.0上,看起来他们修复了头部分离的子模块问题,但仍然存在一些bug。我的一个项目的一个子模块被Xcode Server完全忽略,因此应用程序无法生成:

$ git submodule
 8a88bc41c9dc0f57c921d82bc4e7b93e1c4cbf7a InAppStore (heads/master)
 e4203f9f61d2546868c1274da5c7a0c56b87a737 Libraries (heads/master)  <--- IGNORED
 01902f255e6c3d90f0db41cb62dd2934098b98dd MixpanelTracker (heads/master)
 e2bee59accd817d50dff881a42c9e9afe307226f XLFacility (1.4.1-5-ge2bee59)

在这一点上,事情正在发展,尽管有关于结帐不干净或类似的非致命警告。当我将bot的配置更改为将“Cleaning”设置为“Always”时,它们消失了。在Xcode 9服务器中,如果工作区中的某个Xcode项目未引用子模块的任何文件,则子模块不会初始化

例如,当您包含不属于代码一部分的子模块的头文件时,可能会发生这种情况,因此您将其添加到“头搜索路径”(c/c++),而不是将其添加到项目中

一种可能的解决方法是将子模块中的至少一个文件添加到Xcode项目中。它甚至可以是
Readme.md
文件。
这比使用自定义脚本签出子模块更容易,因为它依赖于Xcode Server来存储您的GIT凭据。

>“bot的日志中不包含试图提取丢失的子模块的痕迹。”这些日志中是否有任何错误消息?唯一的错误消息是由于缺少源文件而导致生成失败的错误消息。我假设一个
git子模块更新--init--recursive
手动工作?是的,我的问题是子模块没有更新到正确的提交。这个解决方案完美地解决了这个问题。我不明白为什么苹果不能让子模块正常工作,但至少脚本给了我们解决办法。
cd${XCS\u PRIMARY\u REPO\u DIR}
将更改为git根目录。并且足够通用,可供所有CI脚本使用。从Xcode 6开始,分离的头部问题已修复。有关当前问题的解决方法,请参见以下Pol的答案。
cd "$XCS_SOURCE_DIR/{YOUR_APP_REPO_NAME_WITHOUT_DOT_GIT_SUFFIX}"
git submodule update --init --recursive