2011-09-12 8 views
19

すべてのgitコミットを特定のタグまで取得してプロジェクトの自動チェンジログを生成する簡単な方法やコマンドはありますか?私はいつも、v0.1.0のようなバージョン番号で私のgit reposにタグをつけます。例えば、すべてのコミットがタグv0.1.0までであるとします。Gitの変更履歴:特定のタグまですべての変更を取得するにはどうすればよいですか?

私は、ドキュメントを通して見てきたが、それのために便利なオプションやコマンドを見つけるように見えることはありません:http://git-scm.com/docs/git-log(ちなみに現時点でダウンしている)

を例えば:

$ git log --oneline --decorate 

コミットの横にあるタグを表示します。私は同じものが欲しいですが、特定のタグまでです。

+1

興味のあるもの:Pimp My Changelog、これを行うためのRubyスクリプト。 https://github.com/pcreux/pimpmychangelog – olleolleolle

答えて

34

あなただけ行うことができます:)問題ないはずです。

git log --oneline --decorate v0.1.0 

... v0.1.0までのすべてのコミットを表示します。もちろん、git logもできますgit rev-listが理解のいずれかの方法で示さコミットを制限することができますので、あなただけv0.0.9間の変更を見たいとあればv0.1.0あなたも行うことができます:

git log --oneline --decorate v0.0.9..v0.1.0 

代替出力をそのこの目的のために役立つかもしれないgit shortlogは、各著者の貢献をグループ化し、要約します。例えば、試してみてください。

git shortlog v0.1.0 
+0

あなたの精巧な答えをありがとう:)これは私が欲しかったものです。 – Luwe

+2

特定のタグの後にコミットを表示するには、 'git log --oneline --decorate v0.1.0..' –

+0

gitコマンドを実行した後にログをコピーするにはどうすればいいですか?つまり、git log --oneline --decorate? –

1

ちょうどあなたのコマンドにtagnameを追加し、私はそのタグにつながった枝を可視化する--graphスイッチを好き:)

1

指定コミットとしてだけでタグ名を使用します。スクリプトに

#!/bin/bash 
# Author:Andrey Nikishaev 
echo "CHANGELOG" 
echo ---------------------- 
git tag -l | sort -u -r | while read TAG ; do 
    echo 
    if [ $NEXT ];then 
     echo [$NEXT] 
    else 
     echo "[Current]" 
    fi 
    GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT 
    NEXT=$TAG 
done 
FIRST=$(git tag -l | head -1) 
echo 
echo [$FIRST] 
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST 
5

を、私はこのスクリプトを使用しましたタグのより良い分類を得るためにCreotivによって提案されました

#!/bin/bash 
# Author:Andrey Nikishaev, Gunnar Lindholm 
echo "CHANGELOG" 
echo ---------------------- 
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags |tac |grep -v '^$' | while read TAG ; do 
    echo 
    if [ $NEXT ];then 
     echo [$NEXT] 
    else 
     echo "[Current]" 
    fi 
    GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT 
    NEXT=$TAG 
done 
FIRST=$(git tag -l | head -1) 
echo 
echo [$FIRST] 
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST 
+0

もしあなたのタグがフォームxyzのバージョンであるならば、1.0のようなバージョンを正しくソートするために' -V'フラグを 'sort'に追加してください.9、1.0.10など –

2

更新:タグで変更履歴を作成するためのgit log --oneline --decorate v0.1.0

0

でコミットします。これにより、バージョンタグが正しく処理されます。

#!/bin/bash 
# Author:Andrey Nikishaev 
echo "CHANGELOG" 
echo ---------------------- 
git tag -l --sort=v:refname | tac | while read TAG ; do 
    echo 
    if [ $NEXT ];then 
     echo [$NEXT] 
    else 
     echo "[Current]" 
    fi 
    GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT 
    NEXT=$TAG 
done 
FIRST=$(git tag -l --sort=v:refname | head -1) 
echo 
echo [$FIRST] 
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST 
関連する問題