2015-11-05 53 views
2

是否有一個命令可以獲取總數爲的行,這些行在當前git回購中已更改。我想考慮考慮上演和非持續文件。Git:在回購中獲取未完成行的總數

這是最接近我能得到

$ git diff --cached --shortstat 
1 file changed, 1 insertion(+), 1 deletion(-) 

$ git diff --shortstat 
1 file changed, 1 insertion(+) 

但我不得不執行兩個指令,然後解析(很容易出錯,你永遠不知道所有的情況下),結果發現已更改號碼。

如果不是git命令,bash/zsh函數也可以。

UPDATE:

這樣的想法是要跟蹤我ZSH提示共提交線(表示一個Git工作目錄的骯髒近似水平),喜歡的東西:

[~/dotfiles] (master) ✗ [192] 
$ ... 

所以感謝以@ arco444的答案,我稍作修改,我現在有以下,只是如果有人想要達到同樣的效果

function git_change_count { 
    local IS_INSIDE_REPO=$(git rev-parse --is-inside-work-tree 2>/dev/null) 
    if [[ $IS_INSIDE_REPO == "true" ]]; then 
     { git diff --cached --numstat; git diff --numstat; } | awk '{ a+=($1+$2) } END {print a}' 
    fi 
} 

我添加了添加和刪除行的行,而不是獲取它們的差異。這基本上意味着編輯過的行顯示爲2,但是這樣做會覆蓋兩個不同的行被添加和刪除並且由於減法而得到0的場景。

+0

這兩個命令將重複計算在兩個位置發生更改的行。這似乎是想要對我做的一件奇怪的事情。這裏的最終目標是什麼? –

+0

@EtanReisner這個想法是捕獲給定的git工作目錄的'骯髒'。它不一定是確切的。我很好,如果一條線,這是上演的計數兩次,如果它在未分離的版本再次改變。 – kunal

回答

7

如何前插入的每一行上除了標誌:

{ git diff --cached --numstat; git diff --numstat; } | awk '{ a+=($1-$2) } END {print a}' 

--numstat標誌爲您提供:

#added #deleted #filename 

您需要t o爲分段和非分段文件運行它,然後管道到awk做算術運算。它會返回一行添加和刪除的行,所以如果刪除了多行而不是添加了行,則會得到負面結果。

2

嘗試這種情況:

git diff --numstat | cut -d$'\t' -f 1 | paste -sd+ - | bc 

這裏git diff --numstat提供添加和substractions每個文件(由製表符分隔)的數目。 cut命令通過製表符分隔字段,選擇第一個字段(添加)。 paste命令從數字列創建一個附加項,bc命令執行總和。以上是補充。你可以用-f 2替代-f 1來做減法。如果你想加法和減法,請嘗試:

git diff --numstat | cut -d$'\t' -f 1,2 | tr '\t' '+' | paste -sd+ - | bc 

它只是使用tr使用paste