如何在腳本中檢查本地更改是否存在?也許與git describe
結合?如何讓「git describe」提到是否存在本地更改?
回答
您需要確保兩個以下兩個屬性都滿足:
那裏面有頭和索引緩存
git diff-index --cached HEAD
那有沒有區別索引與工作樹沒有區別:
git diff-files
這兩個命令都需要--quiet
參數,其將根據是否有差異或不設置的退出代碼(起始的git 1.4後的一段時間)。如果你需要在git 1.4上工作,你需要運行這些命令而不用--quiet
並檢查它們是否產生任何輸出。
注:git diff
是一個瓷器命令,因此不應該在腳本中使用。改用上面的管道命令。
實施例殼代碼,從我git_version.sh script採取:
git_dirty=yes
# git-1.4 does not understand "git-diff-files --quiet"
# git-1.4 does not understand "git-diff-index --cached --quiet HEAD"
if [ "x$($GIT diff-files)" = "x" ] && [ "x$($GIT diff-index --cached HEAD)" = "x" ]; then
git_dirty=no
fi
如果能需要一個git版本> = 1.5,if git diff-files --quiet && git diff-index --quiet --cached HEAD; then
可以代替上述的比較。
注:該解決方案(酷似安東尼的互動git diff HEAD --quiet
)僅發現相對於頭部的局部變化。但是,本地提交也可以被認爲是本地更改,並且自然不會出現在與HEAD的任何差異中。您將需要檢查SHA1值git describe
用於檢測HEAD是否來自您認爲不是本地更改的一組提交。
git status
如果沒有本地更改,則會退出非零狀態。
但我不明白你的意思是「結合使用git描述」。
v1.1-5-g1234567將意味着沒有局部的變化和v1.1-5 - g1234567(+),將意味着與本地更改。 git狀態在此處返回1時出現未分配的本地更改 – 2009-12-31 13:38:13
git diff --quiet
返回退出狀態1,如果有更改,則返回0,如果沒有更改。
請記住,它將顯示階段性更改和工作目錄之間的差異。 如果您對HEAD和工作目錄之間的更改感興趣,應該使用git diff HEAD --quiet
。
--quiet
暗示--exit-code
。
我看到此解決方案的兩個問題:a)'git diff'是瓷器,而git上游強烈建議不要在腳本中使用瓷器。 b)'git diff'將忽略已經在索引緩存中的任何未提交的更改。 請參閱我的答案在http://stackoverflow.com/questions/1985301/how-to-make-git-describe-mention-the-presence-or-absence-of-local-changes/1989142#1989142如何解決這些問題。 – ndim 2010-01-01 17:49:27
問題是關於找到_local changes_。 'git diff HEAD --quiet'發現_local changes_正是您建議的兩個管道命令的結果。瓷器/管道的區別在這裏並不那麼重要。 – 2010-01-01 18:51:48
git開發人員說要爲腳本使用管道命令,因此我將腳本作爲腳本的基礎。至於*本地修改*,'git diff HEAD --quiet'在功能上等價於我的兩個命令,但我仍然更喜歡API git upstream推薦用於腳本案例。 – ndim 2010-01-01 19:13:31
由於git 1.6.6,git-describe
已接受--dirty
選項。如果你有你的工作樹提交的修改,那麼你會得到的輸出是這樣的:
$ git describe --dirty
1.0.2-2-g215081f-dirty
- 1. 無法將更改提交到本地git存儲庫
- 2. 如何讓git覆蓋未知的本地更改?
- 3. TFS中是否存在本地提交?
- 4. 如何更改本地git ssh-key?
- 5. Git:如何覆蓋本地更改?
- 6. Git - 恢復從本地存儲庫提交的更改
- 7. 讓git從本地資源庫更改到服務器存儲庫
- 8. Git - 系統認爲提交是本地更改
- 9. Git - 重置本地更改
- 10. 讓git免於需要提交更改
- 11. Git是否存儲修改?
- 12. 如何檢查您的本地git存儲庫是否最新
- 13. 如何使用git來檢查本地文件夾是否包含更改
- 14. 如何在本地提交Git文件?
- 15. git:編輯本地提交而不更改其提交ID
- 16. 如何將本地更改推送到bitbucket上的遠程git存儲庫
- 17. 如何讓Git突出顯示更改?
- 18. 如何讓git讀取模式更改?
- 19. 在遠程提交和推送時放棄本地git更改
- 20. 如何在本地更改css樣式並保存此更改
- 21. 如何將不良變更回滾到本地git存儲庫?
- 22. 在Eclipse中將更改從Bitbucket更新到本地git存儲庫?
- 23. 如何讓本地HTML將文本保存到本地文件?
- 24. Git:如何找到origin/master是否與(本地)master相同?
- 25. 如何查看本地存儲更改
- 26. 是否可以在git上更改提交日期?
- 27. GitBash/GitExtensions問題提交本地更改
- 28. 在custom_target中執行git describe
- 29. 在GIT中,它是否安全地將core.autocrlf更改爲false?
- 30. 如何我可以存儲一些本地更改,倖存下來git reset --hard
另請參閱我的意見在http://stackoverflow.com/questions/1985301/how-to-make-git-describe-mention-the-presence-or-absence-of-local-changes/1985431#1985431 – 2010-01-01 18:54:49