自動コミットメッセージ
Gitは、すべての時間を使用しないかもしれない作り付けの機能がたくさんあるが、それはあなたがそれを必要なときに便利です.一つはフックです.これらは、リモートにプッシュする前にテストをコミットまたは実行する前にコードを整形するようなものを行うために使用できます.今日は、どのように自動的にあなたのコミットメッセージの一部を埋めるために使用できるかを見てみましょう.
どうやってここまで来たの?
私が働いているチームは、コミットメッセージとブランチ名のためにシステムを使用します.gitlabを使用して、彼らは何かのように見える
あなたが私のようであるならば、あなたの心はたった今あなたにポンキングしなければなりません確かに我々はすべての必要はありませんか?さて、問題ブランチが問題にスコープされていて、高速順のマージがなければ、ブランチ名は十分でなければなりませんが、コミットされたコミットログなどでは実際には表示されません.
心配するな我々は、コンピュータを我々のためにそれを満たすようにすることができます!
右フックの選択
Gitは、利用できるかなりのフックを持っていますあなたがチェックするならば
我々のケースでは、コミットメッセージバッファが我々のスクリーンに現れる前に、システムにフックすることに興味があります
自動メッセージを充填
今、私のチームはコミットに使用するテンプレートを持っています
スクリプト全体は次のようになります.
プログラムの2つのバージョンがどのようにファイルを適切に書くかにはわずかな違いがあります.
The
次の(そして最後の)ステップは簡単です
The
そして、好奇心のために、これらはあなたが
このスクリプトがあなたが望むことをするとき、かなり重要な例外があります:あなたがまだマスターブランチにいるとき、コミットメッセージがテキストで始まるでしょう
もう一つの欠点は、コミットメッセージがgitがディスク上で見つけることを期待しているものと異なっているからです.少なくとも、それはVimを使うとき、私が見つけたものです.簡単な回避策はバッファ内のすべてを削除します(
交互アプローチ
私がユーザーに示される前にコミットメッセージを修正することを選んだ間、あなたは潜在的にまた、マシンにIDを自動的に加えることができました
システムがメッセージをパターンにチェックして、それが存在しないならば、予想された問題IDでコミットを修正します.
この解決法は、それが正しいかどうか確かめるどんな方法も与えません、したがって、あなたは多分それを迂回する何らかの方法が欲しいでしょう.
どうやってここまで来たの?
私が働いているチームは、コミットメッセージとブランチ名のためにシステムを使用します.gitlabを使用して、彼らは何かのように見える
#2 Adds sorting functionality to UI
(コミットメッセージの時制について議論することができます)#42/new-sorting-algorithm
, それぞれ.あなたが私のようであるならば、あなたの心はたった今あなたにポンキングしなければなりません確かに我々はすべての必要はありませんか?さて、問題ブランチが問題にスコープされていて、高速順のマージがなければ、ブランチ名は十分でなければなりませんが、コミットされたコミットログなどでは実際には表示されません.
心配するな我々は、コンピュータを我々のためにそれを満たすようにすることができます!
右フックの選択
Gitは、利用できるかなりのフックを持っていますあなたがチェックするならば
.git/hooks
ディレクトリプロジェクトのディレクトリは、ファイルの束を見つける必要があります名前<hook name>.sample
. フック名のほとんどはかなり記述的ですが、いつでもlook them up あなたがより知りたいならば.我々のケースでは、コミットメッセージバッファが我々のスクリーンに現れる前に、システムにフックすることに興味があります
prepare-commit-msg
フック.自動メッセージを充填
今、私のチームはコミットに使用するテンプレートを持っています
#[task number]
. この知識を使用すると、いくつかの空想シェルマジックを行うことができますし、枝の名前からタスクを置き換えます.スクリプト全体は次のようになります.
#!/bin/sh
TASK_NO=$(git rev-parse --abbrev-ref HEAD | cut -d '/' -f 1)
# BSD sed (macOS)
sed -i'' -e "s/#\[task number\]/$TASK_NO/" "$1"
# GNU sed (Linux)
# sed -i -e "s/#\[task number\]/$TASK_NO/" "$1"
BSD sed ( macos )やgnu - sed ( linux )を使用するかどうかによって異なります.sed
コマンドは少し異なる振る舞いをする.GNU sedの場合、最初のものの代わりにコメントアウト行を使います.プログラムの2つのバージョンがどのようにファイルを適切に書くかにはわずかな違いがあります.
The
git rev-parse --abbrev-ref HEAD
コマンドはあなたに現在のブランチの名前を与えます/
文字使用cut
.次の(そして最後の)ステップは簡単です
sed
置換#[task number]
枝のタスク番号を文字列で返します.The
$1
最後の行の末尾の変数はコミットメッセージファイルの名前で、スクリプトが自動的に受け取るものです.これを使うためにsed
テキストを置き換えるファイル.そして、好奇心のために、これらはあなたが
pre-commit-msg
フックpre-commit-msg.sample
ファイル名:
COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3
警告このスクリプトがあなたが望むことをするとき、かなり重要な例外があります:あなたがまだマスターブランチにいるとき、コミットメッセージがテキストで始まるでしょう
master
. 私は特別なケースを加えることを考えました、しかし、次に、それが私がブランチオフしなければならないとき、それが私が私が覚えているのを助けるという点で実際に非常に役に立つと理解しました.もう一つの欠点は、コミットメッセージがgitがディスク上で見つけることを期待しているものと異なっているからです.少なくとも、それはVimを使うとき、私が見つけたものです.簡単な回避策はバッファ内のすべてを削除します(
dae
あなたがものすごいを使うならばtext-obj-entire プラグインを終了する前に.ほとんどの場合、しかし、私はMagit Emacsでは、コミットのキャンセルが期待通りに動作します.交互アプローチ
私がユーザーに示される前にコミットメッセージを修正することを選んだ間、あなたは潜在的にまた、マシンにIDを自動的に加えることができました
pre-commit
フック.システムがメッセージをパターンにチェックして、それが存在しないならば、予想された問題IDでコミットを修正します.
この解決法は、それが正しいかどうか確かめるどんな方法も与えません、したがって、あなたは多分それを迂回する何らかの方法が欲しいでしょう.
Reference
この問題について(自動コミットメッセージ), 我々は、より多くの情報をここで見つけました https://dev.to/hartmann/automate-your-commit-messages-3dajテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol