私のGitリポジトリのコミット数を取得したいのですが、SVNのリビジョン番号に少し似ています。
目標は、これを固有の増分ビルド番号として使用することです。
私は現在Unix/Cygwin/msysGit上でそのようにしています:
git log --pretty=format:'' | wc -l
しかし、私はそれがちょっとしたハックだと思います。
もっと良い方法はありますか?私が実際にwc
やGitさえも必要としなかったなら、それは素晴らしいでしょう、それでそれは裸のWindowsで動作するかもしれません。ファイルやディレクトリ構造を読むだけです。
リビジョンのコミットカウントを取得するには(HEAD
、master
、コミットハッシュ):
git rev-list --count <revision>
すべてのブランチにわたるコミット数を取得するには
git rev-list --all --count
ビルド識別子にはこれを使用しないことをお勧めしますが、必要に応じて、ビルドしているブランチのカウントを使用することをお勧めします。そのように同じリビジョンは常に同じ番号を持ちます。すべてのブランチにこの数を使用すると、他のブランチでのアクティビティによって数が変わる可能性があります。
git shortlog
は一方通行です。
git rev-list HEAD --count
git rev-list <commit>
:与えられたコミットからの親リンクをたどることによって到達可能なコミットを一覧表示します(この場合、 _ head _ )。
--count
:リストされたコミットの数を記載した数字を表示し、他のすべての出力を抑制します。
このコマンドは、コミット者によってグループ化されたコミットの数を返します。
git shortlog -s
git shortlog -s
14 John lennon
9 Janis Joplin
コミットのための一意で、まだ非常に読みやすい識別子を探しているなら、 git describe はあなたのためのものかもしれません。
Gitの「リビジョン番号」 について最初に考えるのはあなたではありませんが、「wc
」は非常に危険です。コミットを消去または破棄でき、履歴が再訪されるからです。
「リビジョン番号」は、Subversionにとって特に重要でした。これは、 マージの場合に必要でした (SVN1.5および1.6が改善されているため)です。
最終的に、コメントにリビジョン番号を含む事前コミットフックがあり、アルゴリズムが関与しないがall正しい数を決定するためのブランチの履歴。
Bazaar 実際に思いついたのは そのようなアルゴリズム であり、これは良い出発点かもしれませんあなたがしたいこと。
( Bombeの答え が指摘しているように、Gitには実際には最新のタグ、コミットの数、SHA-1キーのビットに基づいて独自のアルゴリズムがあります)。それがあなたのために働くならば、あなたは彼の答えを見なければなりません(そして賛成するべきです)。
Aaronのアイデア を説明するために、 Gitコミットハッシュをアプリケーションの「情報」ファイルに追加 アプリケーションと共に配布しています。
そうすれば、aboutボックスは次のようになります。
Applicative番号はコミットの一部ですが、「application's "info" file」はパッケージングプロセス中に生成され、applicativeビルド番号を技術リビジョンid。
Uを使用することができます:
git shortlog -s -n
結果:
827 user one
15 user two
2 Gest
それを変数にするには、最も簡単な方法は次のとおりです。
export GIT_REV_COUNT=`git rev-list --all --count`
簡単な方法は:
git log --oneline | wc -l
oneline
はそれを保証します。
Gitのショートログは、コミットの詳細を取得する1つの方法です。
git shortlog -s -n
これはコミットの数とそれに続く著者名を与えます。 -sオプションを指定すると、作成者が作成した各コミットのすべてのコミットメッセージが削除されます。コミットメッセージも見たい場合は、同じオプションを削除してください。リスト全体をソートするには、-nオプションを使用します。お役に立てれば。
git rev-parse - 短いHEAD
Gitの人々がGit describeに基づいて有用なバージョン番号を生成するのを助けるために使用するNiceヘルパースクリプトがあります。スクリプトを表示し、に対する私の答えでそれを説明します。Gitプロジェクトのファイルに現在のコミットIDをどのように含めますか?。
Masterのようにブランチを1つだけ使用している場合は、これでうまくいくと思います。
git rev-list --full-history --all | wc -l
これは数字だけを出力します。あなたはそれをのようなものにエイリアスすることができます
git revno
物事を本当に便利にするために。そうするために、あなたの.git/config
ファイルを編集し、これを以下に追加してください。
[alias]
revno = "!git rev-list --full-history --all | wc -l"
これはWindowsでは機能しません。私はそのOSの "wc"に相当するものを知りませんが、あなたのためにカウントをするためにPythonスクリプトを書くことはマルチプラットフォームの解決策でしょう。
当社では、SVNからGitに移行しました。改訂番号の欠如は大きな問題でした!
git svn clone
を実行してから、最後のSVNコミットをそのSVNリビジョン番号でタグ付けします。
export hr=`git svn find-rev HEAD`
git tag "$hr" -f HEAD
それからあなたはの助けを借りてリビジョン番号を取得することができます
git describe --tags --long
このコマンドは次のようになります。
7603-3-g7f4610d
意味:最後のタグは7603です - それはSVNのリビジョンです。 3 - それからのコミットの数です。追加する必要があります。
そのため、このスクリプトでリビジョン番号を数えることができます。
expr $(git describe --tags --long | cut -d '-' -f 1) + $(git describe --tags --long | cut -d '-' -f 2)
ビルド中に番号を生成してファイルに書き込みます。リリースするときはいつでも、そのファイルを "Build 147"というコメントでコミットしてください(あるいは現在のビルド番号はなんでも)。通常の開発中はファイルをコミットしないでください。こうすることで、Gitのビルド番号とバージョンを簡単にマッピングすることができます。
私が使用していたものは次のとおりです。
git log | grep "^commit" | wc -l
シンプルだがうまくいった。
Bash構文を使う
$(git rev-list --count HEAD)
純粋に線形の履歴ではうまく見えます。 master
を基にしてブランチから「数」を得たい場合は、次の点を考慮してください。
$(git rev-list --count $(git merge-base master HEAD)).$(git rev-list --count ^master HEAD)
master
のチェックアウトから実行すると、単に1234.0
などになります。ブランチのチェックアウトから実行すると、そのブランチで13のコミットが行われた場合は1234.13
のようなものになります。明らかに、これはあなたが与えられたmaster
リビジョンからせいぜい1つのブランチを基にしている限りにおいてのみ有用です。
--first-parent
をマイクロ番号に追加して、他のブランチをマージすることによってのみ発生するコミットを抑制することは可能ですが、おそらく不要です。
あなたが試すことができます
git log --oneline | wc -l
あるいはリポジトリに貢献している人々が行ったすべてのコミットを一覧表示する
git shortlog -s
git config --global alias.count 'rev-list --all --count'
これをあなたの設定に追加すれば、あなたはただコマンドを参照することができます。
git count
このようにgit shortlogを使う
git shortlog -sn
またはエイリアスを作成する(ZSHベースの端末用)
# show contributors by commits alias gcall="git shortlog -sn"