Gitでコミットデータをチェックする適切な方法は何ですか?


13

私の目標は、特定の要件を満たさないコミットデータをチェックし、作成中のコミットまたはリモートリポジトリにプッシュされたコミットを拒否することです。

事前コミットフックを行うことの問題は、事前コミットフックファイルを手動で更新する必要がある多くの人々に展開するのが難しいことです。同様に、Gitでは.gitフォルダーにサブモジュールを配置することはできません。サブモジュールを配置することは非常に簡単ですが、悲しいかな。

私が見る他のオプションは、リモート側の更新フックをチェックインすることです。これは、devによってプッシュされた各コミットをチェックし、コミットのいずれかがテストに失敗した場合にプッシュを拒否します。

誰もこの問題に関する洞察を持っていますか?もしそうなら、更新フックスクリプトの例を提供してくれますか?私はそれがどのように機能するかに関して少し混乱しています。


4
これは素晴らしい最初の質問です。
デニーズ

回答:


7

最初に、修飾されていないコードをコミットしたくないのか、上流にプッシュ/パブリッシュしたくないのかを把握する必要があります。

私の意見では、後者の方が実行可能です。

gitのようなDVCSで。すべての開発者がローカルリポジトリをどのように使用するかを実際に制御する必要はありません。そして、あなたはそれを実際に制御することはできません。

関係者全員が自発的に受け入れた場合、プリコミットフックは基本的な検証とサニタイズとしてうまく機能します。当社では実際にそれを大まかに実施しています。ただし、で常にスキップできgit commit --no-verifyます。

一方、サーバーサイドフックはプログラマのローカルワークフローに介入せず、プロジェクト内の他のユーザーが特定の基準を満たすコードのみに基づいて作業を行うようにします。通常、これは人々が自動チェックを実装するときに探すものです。

この自動検証は、通常、コードレビューまたはペアプログラミングで達成される品質管理に取って代わるものではありません。

githubに精通している場合は、「プルリクエスト」がこの問題に対するさらに別のアプローチであることに気付くでしょう。多くのオープンソースプロジェクトおよび企業は、ブランチのアクセス許可制御とコードレビューのためにgithubのプルリクエストを使用しています。しかし、それは人間の相互作用を必要とするため、あなたが求めているものではないかもしれません。


1

すでに指摘したように、クライアントでこれを行うことは、技術的には可能ですが、おそらく実用的ではありません。また、多くのgitユーザーが中間作業をコミットするため、コミットごとに厳格なチェックを行うと逆効果になります。

標準的な解決策は、サーバー側のフックです。おそらく、pre-receiveフックが設定され、プッシュが入るたびに実行され、必要に応じてプッシュを拒否できます。残りはあなたがしたい正確なチェックに依存します。

これについては、Pro Gitの7.3章「Git-Gitフックのカスタマイズ」で説明しています。


ご回答いただきありがとうございます。新しいGit Webサイトが大好きです。私の唯一の問題は、特にプロセスのどこにいるのか、何を確認する必要があるのか​​がわからないため、独自のコミットフックの作成を始めるのが難しいということです。事前受信フックを作成しようとしている場合、リモートにプッシュしているものの追跡ブランチがあると仮定しますか?どうやって知るの?gitのある種の機能があれば、このインスタンスにあるものを時間内にシミュレートできます。
ダランミラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.