2017-11-11 119 views
1

我已經爲我的應用程序一起更新了更新程序,以便具有很少或沒有編碼技能的人員可以在自己的計算機上安裝,運行和更新應用程序。爲什麼我不應該使用這個瓷器Git命令來判斷我的回購是否有任何變化?

下面是一個更新的例子,對於Windows命令提示符寫:

@echo off 
for /f %%i in ('call git status --porcelain') do set stash=%%i 
if not [%stash%] == [] (
    echo Stashing local changes... 
    call git add . 
    call git stash -q 
) 
echo Updating App... 
call git pull origin master 
if not [%stash%] == [] (
    echo Restoring local changes... 
    call git stash apply -q 
) 
echo Updating Dependencies... 
call npm update 
echo Done 
pause 

正如你所看到的,我打電話git status --porcelain告訴應用程序是否有需要被藏匿的局部變化在拉遠程主分支之前。

此命令將返回什麼如果工作目錄是乾淨的,但總是會返回東西如果有局部變化,跟蹤或以其他方式。

我從其他SO帖子看到,使用瓷器命令在git中進行管道工作是不好的,但在這種情況下,它對我來說效果很好,而且我也不明白爲什麼git status --porcelain命令會永遠當有一個乾淨的工作目錄時,返回東西

所以我的問題是:在這個特定的用例中使用瓷器是錯誤的嗎?如果是這樣,爲什麼?

獎勵:有什麼更好的方法來解決這個問題?

回答

1

實際上,使用git status--porcelain開關沒有什麼不對。此外,當您窺視文檔時,您將看到您完全按照其設計的方式使用該命令:

爲腳本提供易於解析格式的輸出。這是類似於短輸出的 ,但在Git 版本中將保持穩定,並且與用戶配置無關。詳情請參閱下文。

這裏的另一個選擇是使用-s開關(git status -s),這也將返回容易解析輸出,但它可能無法得到保證,以備將來的版本相同的方式工作。

我覺得git status這個特殊用法在任何方面都不正確。它完成這項工作,它可靠並且易於理解。

與瓷器相同的命令可以例如是:

git ls-files --exclude-per-directory=.gitignore --exclude-from=.git/info/exclude --others --modified -t 

但從git ls-files文檔上-t開關:

此功能是半棄用。對於腳本的目的, git-status(1) - 瓷器和git-diff-files(1) - 名稱狀態差不多 總是優於 的替代品,用戶應該看一下git-status(1) - short或git-diff(1) - 名稱狀態以獲得更多用戶友好的選擇。

所以你看到,即使git手冊建議使用git status替代。

+0

這很有啓發。我仍然困惑,爲什麼他們開關' - 瓷器',當它的意圖是在這個更加管道導向的情況下使用。 – Bango

+1

@Bango,很多git命令都有'--porcelain'開關,只是爲了說明使用這個開關時它們提供了穩定的輸出。 – Opal

1

git status --porcelain不是一個瓷器命令。該選項的名稱具有誤導性,但實際上它的意思是「給出一個容易分析和穩定的輸出,適用於瓷器劇本」。因此,--porcelain意味着「充當管道命令」。

正如在另一個答案中已經說過,你做什麼都沒有錯,--porcelain是爲了用你的方式使用。

相關問題