Gitリポジトリ内のすべてのファイルに含まれる総行数をどのように数えますか?
git ls-files
は私にgitによって追跡されたファイルのリストを与えます。
これらすべてのファイルをcat
するコマンドを探しています。何かのようなもの
git ls-files | [cat all these files] | wc -l
xargs
はあなたが望むことをするでしょう:
git ls-files | xargs cat | wc -l
しかし、もっと多くの情報があれば、おそらくもっと良いことができます。
git ls-files | xargs wc -l
git diff --stat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
これは空のツリーと現在の作業ツリーとの違いを示しています。これはあなたの現在の作業ツリーのすべての行を数えるために起こります。
現在の作業ツリーの番号を取得するには、これを行います。
git diff --shortstat `git hash-object -t tree /dev/null`
それはあなたに1770 files changed, 166776 insertions(+)
のような文字列を与えるでしょう。
プロジェクトの範囲を把握したいためにこのカウントが必要な場合は、 _ cloc _ (“ Count Lines of Code”)の出力をお勧めします。言語によるコード行。
cloc $(git ls-files)
(この行はgit ls-files | xargs cloc
と同等です。これはsh
を使用します $()
コマンド置換 feature。)
出力例:
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
をインストールすることができます - 例えば Homebrew を付けたbrew install cloc
。
cloc $(git ls-files)
はcloc .
を改良したものです。たとえば、上記のgit ls-files
の出力例では、471行のコードがレポートされています。同じプロジェクトの場合、cloc .
はGit-ignored node_modules
フォルダー内の依存関係を検索するため、なんと456,279行(実行に6分かかります)報告します。
多数のファイルを扱うときにgit ls-files | xargs wc -l
でバッチ処理の問題に遭遇しました。そこでは行数が複数のtotal
行にまとめられます。
質問からヒントを得る なぜwcユーティリティは "total"で複数の行を生成するのですか? 、この問題を回避するために次のコマンドを見つけました。
wc -l $(git ls-files)
あるいは、いくつかのファイルだけを調べたい場合は、コード:
wc -l $(git ls-files | grep '.*\.cs')
とにかく、最善の解決策は@ ephemientの答えのコメントに埋め込まれています。見過ごさないように、ここで引き上げているだけです。これに対する功績は@FRoZeN(そして@ephemient)に行くべきです。
git diff --shortstat `git hash-object -t tree /dev/null`
追加のノイズなしで、リポジトリの作業ディレクトリ内のファイルと行の合計を返します。ボーナスとして、ソースコードだけが数えられます - バイナリファイルは集計から除外されます。
上記のコマンドはLinuxとOS Xで動作します。クロスプラットフォーム版は次のとおりです。
git diff --shortstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904
これはWindowsでも動きます。
レコードの場合、空白行を除外するためのオプション
-w
/--ignore-all-space
、-b
/--ignore-space-change
、--ignore-blank-lines
、--ignore-space-at-eol
--shortstat
と併用しても効果はありません。空白行はカウントされます。
これは cloc 1.68以降で動作します。
cloc --vcs=git
私はcmder( http://gooseberrycreative.com/cmder/ )で遊んでいて、html、css、Java、およびjavascriptの行を数えたいと思っていましたが、grepのor
パターンはうまくいきました。しなかった - 私はそれをエスケープしなければならなかったことをここに見つけた( https://unix.stackexchange.com/questions/37313/how-do-i-grep-for-multiple-patterns )
だからこれは私が今使っているものです:
git ls-files | grep "\(.html\|.css\|.js\|.Java\)$" | xargs wc -l
私は以下を使います:
git grep ^ | wc -l
これは、gitによってバージョン管理されているすべてのファイルで正規表現^
を検索します。これは行の始まりを表しているので、このコマンドは合計行数を示します。
Github上のこのツール https://github.com/flosse/sloc は、より説明的な方法で出力を提供できます。それはあなたのソースコードの統計を作成します。
これは私がしました:
git ls-files | xargs file | grep "ASCII" | cut -d : -f 1 | xargs wc -l
これは、リポジトリ内のすべてのテキストファイルを目的のファイルとして数えた場合に機能します。ドキュメントなどと見なされるものがある場合は、除外フィルタを追加できます。
: | git mktree | git diff --shortstat --stdin
または
git ls-tree @ | sed '1i\\' | git mktree --batch | xargs | git diff-tree --shortstat --stdin
試してください:
find . -type f -name '*.*' -exec wc -l {} +
問題のディレクトリ