簡體   English   中英

在 git 中查找未提交或未跟蹤文件的總大小

[英]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 工具: dufind和 &c。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM