904

gitリポジトリ内のすべてのファイルに存在する行の総数をどのようにカウントしますか?

git ls-filesgitによって追跡されるファイルのリストを表示します。

catこれらすべてのファイルへのコマンドを探しています。何かのようなもの

git ls-files | [cat all these files] | wc -l
4

16 に答える 16

1382

xargsあなたが尋ねたように、catそれらを渡す前にあなたにすべてのファイルを一緒にさせます:wc

git ls-files | xargs cat | wc -l

しかし、中間体をスキップするcatと、より多くの情報が得られ、おそらくより良いでしょう:

git ls-files | xargs wc -l
于 2011-01-27T22:11:03.600 に答える
395
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

これは、空のツリーと現在の作業ツリーの違いを示しています。これは、現在の作業ツリーのすべての行をカウントします。

現在の作業ツリーの数値を取得するには、次のようにします。

git diff --shortstat `git hash-object -t tree /dev/null`

のような文字列が表示されます1770 files changed, 166776 insertions(+)

于 2011-01-27T22:51:38.470 に答える
383

プロジェクトの範囲を把握したいためにこのカウントが必要な場合は、CLOC(「コードのカウント行」)の出力をお勧めします。これにより、言語ごとの重要なコード行と重要でないコード行の内訳がわかります。

cloc $(git ls-files)

(この行はに相当します。のコマンド置換git ls-files | xargs cloc機能を使用します。)sh$()

サンプル出力:

      20 text files.
      20 unique files.                              
       6 files ignored.

http://cloc.sourceforge.net v 1.62  T=0.22 s (62.5 files/s, 2771.2 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Javascript                       2             13            111            309
JSON                             3              0              0             58
HTML                             2              7             12             50
Handlebars                       2              0              0             37
CoffeeScript                     4              1              4             12
SASS                             1              1              1              5
-------------------------------------------------------------------------------
SUM:                            14             22            128            471
-------------------------------------------------------------------------------

最初にCLOCをインストールする必要があります。おそらく、パッケージマネージャーを使用してインストールclocできます(たとえば、brew install clocHomebrewを使用

cloc $(git ls-files)多くの場合、よりも改善されていcloc .ます。たとえば、上記のサンプル出力では、 git ls-files471行のコードが報告されます。同じプロジェクトで、Gitが無視するフォルダー内cloc .の依存関係を検索するため、なんと456,279行(実行に6分かかります)を報告します。node_modules

于 2015-03-12T16:32:13.743 に答える
67

git ls-files | xargs wc -l多数のファイルを処理するときに、行数が複数の行にチャンク化されるバッチ処理の問題が発生しましたtotal

質問からヒントを得るwcユーティリティが「合計」で複数の行を生成するのはなぜですか?、問題を回避するための次のコマンドを見つけました。

wc -l $(git ls-files)

または、コードなど、一部のファイルのみを調べたい場合は、次のようにします。

wc -l $(git ls-files | grep '.*\.cs')

于 2013-07-30T06:03:40.973 に答える
60

とにかく、私にとって最良の解決策は、@ephemientの回答のコメントに埋もれています。見過ごされないように、ここで引き上げています。このクレジットは@FRoZeN(および@ephemient)に送られます。

git diff --shortstat `git hash-object -t tree /dev/null`

追加のノイズなしで、リポジトリの作業ディレクトリ内のファイルと行の合計を返します。ボーナスとして、ソースコードのみがカウントされます-バイナリファイルは集計から除外されます。

上記のコマンドはLinuxとOSXで動作します。クロスプラットフォームバージョンは

git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904

これはWindowsでも機能します。

記録のために、空白行を除外するためのオプション、

  • -w/ --ignore-all-space
  • -b/ --ignore-space-change
  • --ignore-blank-lines
  • --ignore-space-at-eol

と一緒に使用しても効果はありません--shortstat。空白行がカウントされます。

于 2015-03-04T15:39:44.040 に答える
21

これは、cloc1.68の時点で機能します。

cloc --vcs=git

于 2017-05-11T19:31:10.343 に答える
18

私は以下を使用します:

git grep ^ | wc -l

これにより、gitによってバージョン管理されたすべてのファイルで、行の先頭を表す正規表現が検索される^ため、このコマンドは行の総数を示します。

于 2017-01-11T06:46:38.277 に答える
14

私はcmder( http://gooseberrycreative.com/cmder/ )で遊んでいて、html、css、java、javascriptの行を数えたかったのです。上記の回答のいくつかは機能しましたがor、grepのパターンは機能しませんでした-私が持っていたものをここ(https://unix.stackexchange.com/questions/37313/how-do-i-grep-for-multiple-patterns)で見つけましたそれを逃れるために

だからこれは私が今使っているものです:

git ls-files | grep "\(.html\|.css\|.js\|.java\)$" | xargs wc -l

于 2015-07-22T01:00:54.313 に答える
4

これは私がしました:

git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l

これは、リポジトリ内のすべてのテキストファイルを対象のファイルとしてカウントする場合に機能します。一部がドキュメントなどと見なされる場合は、除外フィルターを追加できます。

于 2015-11-21T20:54:46.793 に答える
4

特定の作成者から行数を取得する場合は、次のコードを試してください。

git ls-files "*.java" | xargs -I{} git blame {} | grep ${your_name} | wc -l
于 2020-06-11T03:28:53.577 に答える
3

github https://github.com/flosse/slocのこのツールは、より説明的な方法で出力を提供できます。それはあなたのソースコードの統計を作成します:

  • 物理的な線
  • コード行(ソース)
  • コメント付きの行
  • 1行のコメント
  • ブロックコメントのある行
  • ソースとコメントと混同された行
  • 空の行
于 2016-01-04T08:00:17.957 に答える
3

試す:

find . -type f -name '*.*' -exec wc -l {} + 

問題のディレクトリ/ディレクトリ

于 2018-06-15T12:37:58.937 に答える
3

バイナリファイルを含めるかどうかに応じて、2つの解決策があります。

  1. git grep --cached -al '' | xargs -P 4 cat | wc -l
  2. git grep --cached -Il '' | xargs -P 4 cat | wc -l

    「xargs-P4」は、4つの並列プロセスを使用してファイルを読み取ることができることを意味します。これは、非常に大きなリポジトリをスキャンしている場合に非常に役立ちます。マシンの容量によっては、プロセスの数を増やすことができます。

    -a、バイナリファイルをテキストとして処理します(バイナリを含む)
    -l''、一致する行ではなくファイル名のみを表示します(空でないファイルのみをスキャンします)
    -I、バイナリファイルのパターンを一致させません(バイナリを除外します)--
    cached、作業ツリーではなくインデックスで検索(コミットされていないファイルを含める)

于 2020-03-04T16:41:23.320 に答える
2

空でない行の総数を知りたい場合は、AWKを使用できます。

git ls-files | xargs cat | awk '/\S/{x++} END{print "Total number of non-empty lines:", x}'

これは、正規表現を使用して、空白以外の文字を含む行をカウントします。

于 2020-07-04T20:24:44.130 に答える
2

Carl Norumによる回答は、スペースを含むファイルがないことを前提としています。他の文字の1つはとIFSです。解決策は、行をNULLバイトで終了することです。tabnewline

 git ls-files -z | xargs -0 cat | wc -l
于 2020-11-18T11:20:07.373 に答える
1
: | git mktree | git diff --shortstat --stdin

または:

git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin
于 2016-01-04T01:25:15.537 に答える