我使用大量單獨的 git 存盤庫將我的作業 (>30) 組織在一個組織良好的檔案夾結構中,只有一個根。由于我在 >= 2 臺計算機上作業,因此我始終必須確保在離開辦公室之前推送所有更改。
要識別所有包含以下檔案的存盤庫:
- 更改/添加/洗掉/等(即它們的檔案已經在版本控制之下)或
- 尚未跟蹤(即 git 還不知道如何處理的新檔案)
...我使用以下方便的單線(沒有我不能再做我的作業):
尋找 。-name '.git' | 同時閱讀回購;做 repo=${repo//.git/}; git -C "$repo" 狀態 -s | grep -q -v "^$" && echo -e "\n\033[1m${repo}\033[m" && git -C "$repo" status -s || 真的; 完畢
(由hoijui撰寫,張貼在這里)。當然,我為它定義了一個別名(我稱之為 gitstatus),我可以在離開辦公室之前執行它。
可悲的是,這個很棒的腳本有一個缺點:它無法識別我已經提交了我忘記推送的檔案的存盤庫。原因是腳本會檢查具有特定狀態的檔案,但在這種情況下沒有這樣的檔案。相反,我需要搜索以下形式的輸出訊息:
- “您的分支領先于 'origin/master' 1 次提交。” 或者
- “您的分支領先于 'origin/master' 2 次提交。”
- (或值 >2。我剛剛添加了兩條訊息以強調這些訊息對于 n=1 和 n>1 提交的字串略有不同。)
我認為對于過去撰寫過一些 bash 腳本的任何人來說,這都是一項微不足道的任務。然而,我已經在沒有投入超過 1 小時的情況下閱讀上面的腳本......而且,我很驚訝沒有在 stackoverflow 上找到任何類似的腳本——甚至上面提到的(非常有用的)腳本之前也沒有在這里發布過!(據我所知。)因此,雖然我在技術上在這里尋求幫助,但我認為即使是問題本身(由于上面的腳本)可能已經對許多人有所幫助!:) 改進后的腳本(如果有人提供答案)有望更有幫助。
無論如何,謝謝你!
僅供參考:這個問題的雙重(補充)是如何查找/識別我有遠程(而不是本地)更改的存盤庫。你在這里找到它。
uj5u.com熱心網友回復:
找到了解決方案!畢竟它在 Stackoverflow 上......(不知道為什么我最初沒有找到它。)
無論如何,這里有一個可以簡單地添加到 .bashrc 的函式:
function gitStatus()
{
echo "Repositories with unpushed commits:"
find . -type d -iname '.git' -exec sh -c 'cd "${0}/../" && git status | grep -q "is ahead of" && pwd' "{}" \;
echo ""
echo "Repositories with changed/deleted/added/untracked files:"
find . -name '.git' | while read repo ; do repo=${repo//.git/}; git -C "$repo" status -s | grep -q -v "^$" && echo -e "\n\033[1m${repo}\033[m" && git -C "$repo" status -s || true; done
}
注意:
- 第一個“查找腳本”是實際答案。
- 第二個“查找腳本”是我已經在問題本身中發布的那個,它列出了所有更改/添加/洗掉/未跟蹤的檔案。
- 兩個腳本之間存在細微的不一致:第一個報告絕對路徑,第二個報告相對路徑。(但這并不重要,所以我不在乎保持一致。)
該解決方案由 Stackoverlow 在 Git 上的帖子中的“Qetesh”提供 - How to find all "unpushed" commits for all projects in a directory? 請注意,該執行緒中還有其他解決方案;但這對我來說似乎最優雅。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/523776.html
標籤:重击混帐
