[英]Find total size of uncommitted or untracked files in git
我有一大堆可怕的代碼,我正在版本控制中設置它。
如果我運行git add -A && git commit -am 'initial commit'
,我想要一個可以在 Linux 上運行的命令,以提供將提交和推送的文件的總大小
需要總大小,按文件夾細分也很方便。
然后,我將使用它來建立我的忽略,以便在我將它推高之前將回購設置為實際大小
我想我已經回答了我自己的問題:
for f in `git status --porcelain | sed 's#^...##'`; do du -cs $f | head -n 1; done | sort -nr; echo "TOTAL:"; du -cs .
但是,我願意接受任何更好的想法或有用的技巧。 我當前的輸出是 13GB :)
上面的命令基本上就在那里,它從 git status 逐行給我總和,但沒有給我總和。 我目前正在最后得到所有文件的總數,這是不正確的。 我嘗試了一些使用bc
但無法讓它工作
我通過添加一個簡單的 awk 語句來調整 edmondscommerce 的答案,該語句將 for 循環的輸出相加並打印總和(除以 1024*1024 以轉換為 Mb)
for f in `git status --porcelain | sed 's#^...##'`; do du -cs $f | head -n 1; done | sort -nr | awk ' {tot = tot+$1; print } END{ printf("%.2fMb\n",tot/(1024*1024)) }'
請注意, --porcelain 打印相對於 git repos 根目錄的路徑名。 因此,如果您在子目錄中執行此操作,du 語句將無法找到文件。
(whoppa;我在 SoF 中的第一個答案,願力量與它同在)
我使用了這個的修改版本,因為我的文件中有空格,導致它崩潰。 我也不確定尺寸計算並刪除了一個無用的head
:
git status --porcelain | sed 's/^...//;s/^"//;s/"$//' | while read path; do
du -bs "$path" ;
done | sort -n | awk ' {tot = tot+$1; print } END { printf("%.2fMB\n",tot/(1024*1024)) }'
我更喜歡使用while
,因為它比for
稍微安全一些:它仍然可以對帶有換行符的文件做一些討厭的事情,所以我希望有一個傳遞null
-separate 文件但仍然能夠 grep 獲取狀態,但我不能找不到一個好的方法。
從2.11 版本開始,git 提供了一個方便的“count-objects”命令:
git count-objects -H
如果這還不夠,我會推薦來自 github 的 git-sizer: https ://github.com/github/git-sizer
git-sizer --verbose
詳細用法在這里: https ://github.com/github/git-sizer/#usage
由於您只是添加所有內容,因此我認為沒有任何理由通過 Git。 只需使用普通的 Unix 工具: du
、 find
和 &c。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.