2014-09-25 72 views
4

我想要在git存儲庫中的代碼行數。 我在谷歌找到了答案。我如何計算遠程git存儲庫的總行

git ls-files -z | xargs -0 cat | wc -l

它運作良好,在本地倉庫。

但是。 我想在遠程存儲庫中計數。

所以,我試過了。

git ls-files -z /home/bjyoo/repositories/root/localfiletest.git | xargs -0 cat | wc -l

git ls-files -z --git-dir=/home/bjyoo/repositories/root/localfiletest.git | xargs -0 cat | wc -l

git --git-dir=/home/bjyoo/repositories/root/localfiletest.git --ls-files | xargs -0 cat | wc -l

所有命令失敗。

有沒有人知道如何計算總代碼行數?

回答

4

雖然VonC在你的命令失敗的原因是正確的,但是仍然有一種方法可以對存儲庫中的行進行計數,即使這個存儲庫是裸露的。

爲了這個工作,你必須讓git從一個特定的版本打印文件的內容,這個版本可以使用git show

這樣的命令可能看起來像這樣,假設您目前在存儲庫中。

for file in $(git ls-tree --name-only -r HEAD); do 
    git show HEAD:"$file" 
done | wc -l 

如果你想從您可以git關鍵字後使用--git-dir不同的文件夾執行命令。

for file in $(git --git-dir=<path-to-repo> ls-tree --name-only -r HEAD); do 
    git --git-dir=<path-to-repo> show HEAD:"$file" 
done | wc -l 

我們正在使用git ls-tree列出存儲庫中的所有文件中,原因是ls-files不以純倉庫工作。然後我們使用git show結合特定修訂版打印文件的內容。

您可以查看ls-tree documentationshow documentation以準確瞭解命令正在執行的操作。

+0

很好的使用git show。 +1 – VonC 2014-09-25 13:57:57

+0

它的作品非常好!謝謝。 – chris 2014-09-26 05:43:50

+0

@chris不客氣。 – 2014-09-26 05:51:45

0

你不能完成這些命令,因爲他們正試圖貓文件在bare repo,其中,根據定義,不具有任何文件(沒有工作樹查出來,因爲裸露的回購協議回購*沒有工作樹)。

所以你仍然需要在本地克隆遠程回購以計算這些行。

您可以使用shallow clone最小化克隆,以不克隆完整歷史記錄。
如果您對完整的回購內容不感興趣,您可以使用sparse checkout來加快此過程。

+0

雖然你確實是正確的,爲什麼OP命令失敗,它仍然可以計算裸倉庫中的行數。查看我的答案獲取更多信息。 – 2014-09-25 13:40:52