27

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

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

例えば:

$ git log --oneline --decorate

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

4

9 に答える 9

47

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

git log --oneline --decorate v0.1.0

...v0.1.0までのすべてのコミットを表示します。もちろん、git logallowsを使用すると、理解できる方法で表示されるコミットを制限することもできます。その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
于 2011-09-12T12:14:56.120 に答える
7

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

#!/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
于 2012-01-09T15:53:03.827 に答える
4

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

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

于 2013-09-04T16:20:45.340 に答える
3

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
于 2012-03-27T06:31:47.620 に答える
3

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

#!/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
于 2018-03-01T10:44:17.810 に答える
2

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

于 2011-09-12T12:13:26.357 に答える
2

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

于 2011-09-12T12:15:48.037 に答える
0

これを行うには、GitChangelogコマンドラインを使用できます。

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}}
"
于 2019-05-30T13:32:58.027 に答える
0

https://pypi.org/project/changelogfromtags/を使用する

pip install changelogfromtags && changelogfromtags
于 2020-01-06T19:13:06.293 に答える