web-dev-qa-db-ja.com

Gitの変更ログ:特定のタグまでのすべての変更を取得する方法は?

プロジェクトの自動変更ログを生成するために、特定のタグまでのすべてのgitコミットを取得する簡単な方法またはコマンドはありますか?私は常にgitリポジトリにv0.1.0のようなバージョン番号でタグを付けます。たとえば、タグv0.1.0までのすべてのコミットを希望します。

ドキュメントを調べましたが、便利なオプションやコマンドが見つからないようです: http://git-scm.com/docs/git-log (現在ダウンしていますところで)

例えば:

$ git log --oneline --decorate

コミットの横にタグを表示します。同じようにお願いしますが、特定のタグまでです。

24
Luwe

あなたはただすることができます:

git log --oneline --decorate v0.1.0

... v0.1.0までのすべてのコミットを表示します。もちろん、git logを使用すると、git rev-listが理解できる方法で表示されるコミットを制限することもできます。したがって、v0.0.9v0.1.0の間の変更のみを確認したい場合は、次のこともできます。

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

この目的に役立つ可能性のある代替出力は、各作成者の貢献をグループ化して要約するgit shortlogの出力です。たとえば、次のことを試してください。

git shortlog v0.1.0
39
Mark Longair

タグによる変更ログの作成には、次のスクリプトを使用しました。

#!/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
6

タグのソートを改善するために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
3
FORTRAN

非常に便利なgemがあり、出力はマークダウンで書き込まれ、問題のサポートを追加し、タグによってコミットを分割します

https://github.com/kebab-project/katip

3
rderoldan1

コマンドにtagnameを追加するだけで、問題はありません:) --graphスイッチを使用して、そのタグにつながったブランチを視覚化できます:)

2
flob

タグ名をコミット指定子として使用するだけです:git log --oneline --decorate v0.1.0

2

私は元のスクリプトのこの変更を思いついた。これにより、バージョンタグが正しく処理されます。

#!/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
2
Lev

使用 https://pypi.org/project/changelogfromtags/

pip install changelogfromtags && changelogfromtags

Git Changelogコマンドライン を使用してこれを行うことができます:

npx git-changelog-command-line -std -tr v0.1.0 -tec "
# Changelog

Changelog for {{ownerName}} {{repoName}}.

{{#tags}}
## {{name}}
 {{#issues}}
  {{#hasIssue}}
   {{#hasLink}}
### {{name}} [{{issue}}]({{link}}) {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
   {{/hasLink}}
   {{^hasLink}}
### {{name}} {{issue}} {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
   {{/hasLink}}
  {{/hasIssue}}
  {{^hasIssue}}
### {{name}}
  {{/hasIssue}}

  {{#commits}}
**{{{messageTitle}}}**

{{#messageBodyItems}}
 * {{.}} 
{{/messageBodyItems}}

[{{hash}}](https://github.com/{{ownerName}}/{{repoName}}/commit/{{hash}}) {{authorName}} *{{commitTime}}*

  {{/commits}}

 {{/issues}}
{{/tags}}
"
0
Tomas Bjerre