2 回答

TA貢獻1807條經驗 獲得超9個贊
在OP 丹尼爾Stutzbach指出,在評論這個簡單的命令git diff-index為他工作:
git diff-index --quiet HEAD --
如果在bash腳本中使用命令,則可以看到“ 如何檢查命令是否成功? ”:
git diff-index --quiet HEAD -- || echo "untracked"; // do something about it
注:如評論由安東尼Sottile
git diff-index HEAD ...將在沒有提交的分支(例如新初始化的存儲庫)上失敗。
我發現的一種解決方法是git diff-index $(git write-tree) ...
并haridsv指出在評論即git diff-files上一個新的文件,不檢測它作為一個差異。
較安全的方法似乎是先git add在文件規格上運行,然后再git diff-index查看運行前是否將任何內容添加到索引中git commit。
git add ${file_args} && \
git diff-index --cached --quiet HEAD || git commit -m '${commit_msg}'
而6502在評論中報告:
我碰到的一個問題是,這git diff-index將告訴我們,除了文件的時間戳記以外,實際上什么也沒有。
運行git diff一次即可解決問題(令人驚訝的是,git diff實際上確實更改了沙箱的內容,這意味著.git/index)
如果git 在docker中運行,也會出現這些時間戳問題。
原始答案:
“以編程方式”意味著從不依賴瓷器命令。
始終依靠管道命令。
另請參見“ 使用Git檢查臟索引或未跟蹤的文件 ”以了解替代方法(如git status --porcelain)
您可以從撰寫本文時所寫的新“ require_clean_work_tree函數 ”中獲得啟發;)(2010年10月上旬)
require_clean_work_tree () {
# Update the index
git update-index -q --ignore-submodules --refresh
err=0
# Disallow unstaged changes in the working tree
if ! git diff-files --quiet --ignore-submodules --
then
echo >&2 "cannot $1: you have unstaged changes."
git diff-files --name-status -r --ignore-submodules -- >&2
err=1
fi
# Disallow uncommitted changes in the index
if ! git diff-index --cached --quiet HEAD --ignore-submodules --
then
echo >&2 "cannot $1: your index contains uncommitted changes."
git diff-index --cached --name-status -r --ignore-submodules HEAD -- >&2
err=1
fi
if [ $err = 1 ]
then
echo >&2 "Please commit or stash them."
exit 1
fi
}

TA貢獻1827條經驗 獲得超4個贊
雖然其他解決方案非常徹底,但是如果您想要快速又臟的東西,請嘗試以下操作:
[[ -z $(git status -s) ]]
它只是檢查狀態摘要中是否有任何輸出。

TA貢獻1852條經驗 獲得超1個贊
git diff --exit-code如有任何更改,將返回非零值;git diff --quiet一樣,沒有輸出。由于您要檢查工作樹和索引,因此請使用
git diff --quiet && git diff --cached --quiet
要么
git diff --quiet HEAD
任何人都會告訴您是否存在未提交的更改。
- 2 回答
- 0 關注
- 734 瀏覽
添加回答
舉報