タイトルの通り,Gitリポジトリを分析する方法(プログラム)を紹介します.
分析プログラムを実行すると,以下のような出力が得られます.
出力結果
コミット数: 370
ファイル数: 2397
合計サイズ: 41.42 MB
プログラムファイル数: 2339
プログラム行数: 5783
ブランチ数: 2
タグ数: 37
初回コミット日時: Fri Oct 12 22:25:39 2018 +0800
最終コミット日時: Sun Jul 20 00:06:49 2025 +0800
コミット者数: 20
累積変更ファイル数: 4834
総コード変更行数: 583682
リモートURL: https://github.com/BIMK/PlatEMO.git
これは,PlatEMOリポジトリを分析してみた結果です.
実行プログラムは,以下の通りです.
git_repo_stats.sh
echo "コミット数: $(git rev-list HEAD --count)"
echo "ファイル数: $(git ls-tree -r HEAD --name-only | wc -l)"
git ls-tree -r -z HEAD --name-only | xargs -0 wc -c 2>/dev/null | \
awk '{s+=$1} END {printf "合計サイズ: %.2f MB\n", s/1024/1024}'
echo "プログラムファイル数: $(git ls-tree -r HEAD --name-only | \
grep -E '\.sh$|\.py$|\.js$|\.m$' | wc -l)"
echo "プログラム行数: $(git ls-tree -r HEAD --name-only | \
grep -E '\.sh$|\.py$|\.js$|\.m$' | xargs cat 2>/dev/null | wc -l)"
echo "ブランチ数: $(git branch -r | wc -l)"
echo "タグ数: $(git tag | wc -l)"
echo "初回コミット日時: $(git log --reverse --format=%cd | head -n1)"
echo "最終コミット日時: $(git log -1 --format=%cd)"
echo "コミット者数: $(git log --format='%aN' | sort -u | wc -l)"
echo "累積変更ファイル数: $(git log --name-only --pretty=format: | sort -u | wc -l)"
echo "総コード変更行数: $(git log --pretty=tformat: --numstat | \
awk '{add+=$1; del+=$2} END {print add + del}')"
echo "リモートURL: $(git remote get-url origin)"
必要な行をコピペして使ってください.
プログラムファイル数とプログラム行数の算出では,適切な拡張子の指定が必要です.
プログラム解説
幾つかのプログラム(コマンド)をピックアップして解説します.
shell系
-
echo:文字列を標準出力します -
$(...):中身を実行し,その結果を出力します(バッククォートとほぼ同じ) -
wc -l:行数を出力します(Word count, Line) -
wc -c:バイト数を出力します -
xargs -0:区切り文字としてヌル文字\0を使い,(前の結果を)標準入力から文字列を受け取り,引数として次に渡します -
2>/dev/null:標準エラー出力stderrを捨てます -
awk:テキスト処理言語です -
grep:テキスト検索ツールです -
cat:ファイルの中身を標準出力します -
head -n1:最初の1行だけ表示します -
sort -u:重複行の削除を含むソートをします
git系
-
git rev-list HEAD:現在ブランチの最新コミット(HEAD)から,その先祖コミットへ,順に全てのコミットIDを出力します -
git rev-list HEAD --count:↑の代わりに,対象となるコミット数のみを出力します -
git ls-tree HEAD:HEADのファイル・ディレクトリ構造を出力します(1階層目のみ) -
git ls-tree -r HEAD --name-only:↑について,すべてのファイルを対象として,ファイル名のみ出力します -
git ls-tree -r -z HEAD --name-only:↑について,区切り文字を\nから\0に変更して出力します
終わりに
Gitリポジトリを分析する方法を紹介しました.
自分の関わっている仕事を客観的に知りたくなった時,紹介したプログラムを使ってみてください.