2017-06-22 31 views
0

在我的构建脚本中,我想检查是否所有子模块都检出了正确的版本。Git:以编程方式检查所有子模块是否指向正确的提交

git submodule status给我“+”或“ - ”,但退出码是百达0

我使用的是DOS的批处理文件,我想有一个错误代码(%ERRORLEVEL%)0,如果如果至少一个指向不同的版本,则所有子模块指向正确提交或!= 0。的GIT中的子模块状态

实施例输出

$ git submodule status 
634e661fd09059a7337c930a9fc5489564dd4ba6 sub1 (heads/master) 
+dceaedd21997d39ab043b0a3a02626fd38234aae sub2 (dceaedd) 
b1f1a58d912e0ab6a885e00cece601f1712d59a1 sub3 (heads/master) 

SUB2已经检出由 '+'

从文档表示的不正确的版本:

每个SHA-1将被前缀 - 如果子模块未初始化 ,则+如果当前签出的子模块提交不与 匹配在包含索引中找到的SHA-1如果子模块已合并冲突,则存储库和U 。

+0

精细。什么阻止你这样做?你介意分享你的批处理文件,并告诉我们你卡在哪里吗?顺便说一下:它不是* [DOS](https://scalibq.wordpress.com/2012/05/23/the-windows-command-prompt-is-not-a-dos-prompt/)! – aschipfl

+0

因为我从来没有使用过git,所以我不知道'git submodule status'的输出是什么样的。但是,这个任务似乎很容易。你可以发布命令的输出示例吗? – MichaelS

+0

@aschipfl:无论版本是否正确,错误代码始终为0 – schoetbi

回答

1

尝试这样:

git submodule status | findstr "^-" 
if %errorlevel%==1 exit /b 0 
exit /b 1 

|findstr "^-"将搜索减号(你有^逃吧)输出。如果-不存在findstr将设置ERRORLEVEL为1。所以,我们在做exit /b 0将反转错误级别为0。否则,exit /b 1正在执行和ERRORLEVER将被设置为1。

+0

因为我想搜索+在这一行的开头我使用了这个'git submodule status | findstr/R“^ +”'完美无缺 – schoetbi

相关问题