2014-03-03 24 views
4

我想計算我目前在git中檢出的分支的總工作副本大小(只有版本化的文件;沒有忽略的文件或文件還不是HEAD的後代)。目前,我嘗試這樣做:如何在git中獲取工作副本大小?

$ git ls-files | du -k | cut -f1 | awk '{total += $1} END {print total}' 

但是這需要時間瘋狂量並輸出一個數字,似乎沒有什麼意義:

29800260 

我不知道這個數字是什麼。如果有更快或更準確的命令來做到這一點,請讓我知道。

+1

'du'不讀標準輸入,所以它會基本忽略你的'git'命令並遍歷整個目錄樹。 – tripleee

回答

2

你在正確的道路上,但使用反引號而不是管道。

du -k `git ls-files` | awk '{total += $1} END {print total}' 

如果你擔心的空白,既git ls-filesxargs可以在空議論:

git ls-files -z | xargs -0 du -k | awk '{total += $1} END {print total}' 

花了這麼長的時間,你因爲git ls-files |基本上是一個無操作,並du -k |是管道爲當前目錄下的每個文件輸出。正是你想避免的!

+0

如果路徑中有空格,則會中斷。我怎樣才能使它與空間一起工作?例子:'Subdir/With Spaces/file.txt' –

0

請注意,du顯示文件佔用的磁盤空間量。這可能會有所不同,具體取決於文件系統類型和設置。例如,一個小的1字節文件可能會佔用4 KB的塊,或者其內容可能與元數據內聯存儲。

如果你想在庫中的所有文件的確切字節大小的總和,而不是,您可以使用此:

git ls-tree -r -l HEAD | cut -d' ' -f 4- | awk '{s+=$1} END {printf "%.0f\n", s}' 

它使用存儲在Git的斑點大小,也適用於一裸倉庫。結果通常小於du

相關問題