29

したがって、私のブランチは「issue-1234」のようなバグトラッカーのチケット番号にちなんで名付けられており、コミットメッセージには常にチケット番号を書き留めるという慣習があります。明示的に入力しなくても、issue- *ブランチに取り組んでいるときに、コミットメッセージにチケット番号を自動的に追加できるかどうか疑問に思っています。

git commitフック、つまりpre-commit、prepare-message、post-commitを調べましたが、どれも私が望んでいたことを実行できないようです。コミット後のフックは近くなりますが、-mでコミットされたメッセージを変更することはできません。

繰り返しになりますが、これが可能かどうか疑問に思っています。

ブランチ:issue-1234

git commit -a -m"fixed this pesky issue"

コミット後、gitログに次のようなメッセージが表示されます。

fixed this pesky issue. ticket number: #1234
4

7 に答える 7

22

あなたはフックを逃しました。あなたが欲しいものはcommit-msg

このフックはgitcommitによって呼び出され、-no-verifyオプションを使用してバイパスできます。提案されたコミットログメッセージを保持するファイルの名前という単一のパラメータを取ります。ゼロ以外のステータスで終了すると、gitcommitが中止されます。

したがって、たとえば:

#!/bin/sh

ticket=$(git symbolic-ref HEAD | awk -F- '/^issue-/ {print $2}')
if [ -n "$ticket" ]; then
    echo "ticket #$ticket" >> $1
fi

これはブランチ名の非常に単純な解析であり、コミットメッセージの独自の行に追加されるだけです。それがあなたにとって十分でない場合は、それを変更してください。

もちろん、実際にはでこれを実行し、 (なしで)prepare-commit-msgコミットすることをお勧めします。1行のコミットメッセージに実際に十分な情報を書き込むことができることは非常にまれです。さらに、フックが希望どおりに機能しない場合に備えて、コミットが行われる前にメッセージを表示できます。git commit-m

于 2011-04-28T20:53:55.233 に答える
8

prepare-commit-msgより多くのパラメータを受け入れるフックを使用することもできますcommit-msg。次に、メッセージがファイルやテンプレートなどから送信されているかどうかを確認して、不要なときに問題番号が追加されないようにすることができます。

次のスクリプトを使用すると、.git/hooks/prepare-commit-msgという名前の機能ブランチで作業しているときに、コミットするたびに3行目に追加されます。foo-123[#123]

私が書いたこの投稿の詳細情報

#!/bin/sh

if [ x = x${2} ]; then
  BRANCH_NAME=$(git symbolic-ref --short HEAD)
  STORY_NUMBER=$(echo $BRANCH_NAME | sed -n 's/.*-\([0-9]\)/\1/p')
  if [ x != x${STORY_NUMBER} ]; then
    sed -i.back "1s/^/\n\n[#$STORY_NUMBER]/" "$1"
  fi
fi
于 2014-07-19T14:20:54.683 に答える
3

このようにして、コミットメッセージの先頭にブランチ名を追加できます。これはprepare-commit-msgフックです。「gitcommit-m」コマンドと「gitcommit」コマンドの両方で機能します。オプションはファイル.git/hooks / pre-commit.skipで、自動追加したくないブランチのリストが含まれています。

BRANCH="$(git rev-parse --abbrev-ref HEAD)"
FILE_CONTENT="$(cat $1)"
skip_list=`git rev-parse --git-dir`"/hooks/pre-commit.skip"
if grep -E "^$BRANCH$" $skip_list; then
  exit
fi
if [ $2 = "message" ]; then
  echo $BRANCH: $FILE_CONTENT > $1
else
  echo $BRANCH: > $1
  echo $FILE_CONTENT >> $1
fi
于 2014-10-23T18:44:39.347 に答える
2

もう1つのオプションはgit notes、言及したフックの1つを使用して、チケット番号情報をコミットに追加するために使用することです。
(メモメカニズムの詳細については、 「自分へのメモ」ブログ投稿エントリを参照してください)

于 2011-04-28T19:20:55.287 に答える
2

事前コミットgiticketフックを使用すると、コミットにチケット番号を自動的に含めることができます。

于 2019-01-04T03:51:22.730 に答える
1

あらゆる種類の問題/チケット番号付けコミットメッセージの完全な解決策は次のとおりです。

prepare-commit-msg

#!/bin/bash
# Append issue number / bug tracking URL to commit.
#
# If the branch name contains the issue number, it will append it to the
# commit message. Example:
#
#   BRANCH NAME            LINE TO APPEND
#   feature/GH-123-emoji   GitHub: #123
#   WRIKE-123-add-payment  Wrike: https://www.wrike.com/open.htm?id=123
#   UNKNOWN-123            Issue: #123

branchName=`git rev-parse --abbrev-ref HEAD`

IFS=- read issueTracker issueNumber <<< $(echo $branchName | sed -nr 's,([a-z-]+/)?([A-Z]+-[0-9]+)-.+,\2,p')

if [[ -z $issueNumber ]]; then
  exit 0
fi

case "$issueTracker" in
  WRIKE)
    line="Wrike: https://www.wrike.com/open.htm?id=$issueNumber"
    ;;
  GH)
    line="GitHub: #$issueNumber"
    ;;
  GL)
    line="GitLab: #$issueNumber"
    ;;
  *)
    line="Issue: #$issueNumber"
    ;;
esac

# If the commit message already contains the line (`--amend`), then do
# not add it again.
if ! ( grep "$line" "$1" > /dev/null ); then
  sed -i.bak -e "/# Please enter the commit message for your changes./ s,^,$line\n\n," $1
fi

リポジトリのディレクトリに配置してリポジトリにのみ適用するか、 core.hooksPath.git/hooks設定してそのディレクトリにコピーし、すべてのリポジトリに適用します。~/.gitconfig

他の便利なスクリプトに加えて、私の設定ファイルリポジトリを参照してください。

于 2018-06-08T05:53:51.803 に答える
0

これは、迅速な解決策を探している人にとっておそらく役立つので、改善の可能性と非常に優れた移植性があります(これを新しいボックスに追加するのは簡単なbashの問題ですsource git-tricks.sh

通常、ブランチ名は次の形式になっています。 <work-category>/<ticket-id>-<short-description>

好き:bug/ID-1234-bad-button-color

次に、次のエイリアスがあります。

  • alias git-branch-name='git rev-parse --abbrev-ref HEAD'
    出力:bug/ID-1234-bad-button-color
  • alias git-branch-ticket='git-branch-name | grep -oP "^[^/]*/\K[^-]*-[0-9]+"'
    出力:(ID-1234 質問の作成者の場合は次のようになります'git-branch-name | grep -oP "^issue-\K[0-9]+"':)

そして最後の1つ:

alias git-describe-commit='git commit --all --edit --message "[$(git-branch-ticket)] --edit this--"'

これによりgit-describe-commit、リポジトリに変更をすばやく追加するために使用できます。

于 2021-01-12T15:41:08.403 に答える