プロジェクトの自動変更ログを生成するために、特定のタグまでのすべてのgitコミットを取得する簡単な方法またはコマンドはありますか?私は常にgitリポジトリにv0.1.0
のようなバージョン番号でタグを付けます。たとえば、タグv0.1.0
までのすべてのコミットを希望します。
ドキュメントを調べましたが、便利なオプションやコマンドが見つからないようです: http://git-scm.com/docs/git-log (現在ダウンしていますところで)
例えば:
$ git log --oneline --decorate
コミットの横にタグを表示します。同じようにお願いしますが、特定のタグまでです。
あなたはただすることができます:
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
タグによる変更ログの作成には、次のスクリプトを使用しました。
#!/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
タグのソートを改善するために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
非常に便利なgemがあり、出力はマークダウンで書き込まれ、問題のサポートを追加し、タグによってコミットを分割します
コマンドにtagname
を追加するだけで、問題はありません:) --graph
スイッチを使用して、そのタグにつながったブランチを視覚化できます:)
タグ名をコミット指定子として使用するだけです:git log --oneline --decorate v0.1.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
使用 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}}
"