2017-06-22 37 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

相關問題