web-dev-qa-db-ja.com

git commitメッセージのJira課題番号

私たちの会社では、svnからgitに移行しています。問題追跡には、AtlassianのJIRAを使用します。

ここで、すべてのコミットメッセージに(svnで行ったように)問題番号が含まれるように強制します。

課題番号が含まれていない場合にコミットを拒否するために使用するcommit-msgフックを見つけました。

JIRAはフィッシュアイを使用してgitリポジトリをスキャンします。コミットメッセージに問題番号が含まれている場合、変更はその問題の下に表示されます。

問題は、gitリポジトリが複製されたときにフックがコピーされないことです。そのため、コミットメッセージの発行番号は強制されません。つまり、新しいコミットが上流にプッシュされた場合、Jiraは問題の下に変更をリストしないことがあります。

質問は;どういうわけかGitを間違った方法で使用していますか?本当にコミットメッセージで課題番号を強制する方法はありますか?または、これを実現するスクリプト/フック(commit-msgフック以外)を持っている人はいますか?

29
meijuh

私は git-jira-hook を使用し、それを私のニーズに合わせて変更しました。必要に応じて、Jiraにログインしている部分を削除して、コミットメッセージから再登録されたjira課題番号が有効かどうかを確認してください。 python(git-jira-hookはpythonで記述されています)が気に入らず、bashを好む場合は、各リポジトリの.git/hooks dirのサンプルスクリプトをニーズ。

誰にとってもうまくいくものを実装することに関しては、上流のリポジトリの「更新」フックとしてgit-jira-hookを使用する必要があります。これにより、適切なjira問題の参照がないコミットメッセージを含むプッシュがブロックされます。欠落している課題参照についてのフィードバックは、プッシュ時にではなくコミット時に取得する方が便利なので、開発者にgit-jira-hookをcommit-msgフックとしてインストールしてもらう必要があります。これをグローバルに行う方法については後で説明します。

これが私がこの問題をどのように解決したかです:

  1. プライベートリポジトリのcommit-msgフック:git-jira-hookを変更して、使用している表記法でjiraの問題の参照を確認しました。次に、フックをグローバルにインストールする方法を説明するために、フックをメールで送信しました this SO question 。フックをグローバルにインストールする場合、これは将来のすべてのクローンで使用され、git initを使用してすでにクローンされたリポジトリに簡単に適用できます。

  2. 上流のリポジトリ更新フック:既に変更されたgit-jira-hookスクリプトを使用して、それを各リポジトリにインストールしました。インタラクティブな認証ビットを上流のリポジトリ(シンボリックリンク)で機能させることができなかったため、代わりに制限付きのアクセス許可Jiraユーザーを作成し、認証をスクリプトにハードコーディングしました。

15
Freerobots

Npmを使用している場合は、 https://github.com/typicode/huskyhttps://github.com/marionebl/commitlint を併用できます。

ファイルを作成:commitlint.config.js

module.exports = {
rules: {
    'references-empty': [2, 'never']
},
parserPreset: {
    parserOpts: {
        issuePrefixes: ['REF-']
    }
}};

そして、package.jsonにフックの設定を追加します

commit-msg:commitlint -E HUSKY_GIT_PARAMS

6
user2350849

サーバー側フック、事前受信フックなども使用できますが、githubに慣れている場合は、これは明らかではありません。

それができない場合は、「インストールフック」ビルドオプション(rakeタスク、makeタスクなど)を提供することを検討しますが、ビルドがバージョン管理システムに関連付けられているため、少し「汚い」と感じます。 ...

1
Arafangion

そのためのアドオンがあります: JIRAのポリシープラグインのコミット

JIRA課題キーが「正式に」メッセージに含まれているかどうかをチェックするだけでなく、対応する課題がJQLクエリと一致するかどうかもチェックします。これを使用すると、特定の問題の種類、特定のステータスの問題、現在のスクラムスプリントの問題、次のバージョンを対象とする問題などに対してのみチェックできるようにする、さまざまな可能性があります。

enter image description here

おまけとして、オリジナル( Subversion )とターゲットバージョン管理システム( Git )の両方で機能し、移行期間中も作業を管理できます。

フックスクリプトを祝福されたレポとフォークにインストールできます。残念ながら、Gitを使用してリポジトリを複製する場合、フックスクリプトは複製されませんが、現在、この回避策を調査しています。

完全なドキュメント: http://www.midori-global.com/products/jira-commit-policy-plugin/documentation/

免責事項:これはJIRAの商用およびサポート対象のアドオンであり、私はそれに取り組んでいる開発者です。

0
Ferenc Kiss

リポジトリのクローンを作成しても、Gitフックはコピーされません。 husky の使用をお勧めします。これは、リポジトリのクローンを作成するすべての人にgitフックを公開するのに役立ちます。

Git commitにjira id参照を含めることを義務付ける。私はそれをリポジトリで設定しました- husky-jira-demo 。これがあなたの要件に対処できることを願っています。

0
Samar Panda

.gitフォルダーでデフォルトのフックを使用している場合、そこに加えた変更はインデックスに登録されず、単にチェックアウトまたは複製できないことを意味します。

コミットメッセージフックを「フック」という名前の別のフォルダーに移動してコミットすると、.gitのデフォルトフックが上書きされます。

コミットに問題番号が含まれていない場合はメッセージボックスをエラーとして表示するため、問題追跡番号が必要ない場合でもユーザーは続行できます(パッチ/ホットフィックスの場合に機能します)。

0
Sumedh Tambe