2014-09-25 95 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

相关问题