web-dev-qa-db-ja.com

.git / hooksのフックへの変更の追跡

Gitフックの変更を追跡する方法はありますか?他の開発者がフェッチするときではなく、自分のマシンにのみ表示される3つのフックがあります。 git addを実行しようとしても機能しません。

53
Hans

http://benjamin-meyer.blogspot.com/2008/10/git-hooks.html

.git/hooksディレクトリ内のファイルはリポジトリの一部ではないため、追跡されません。回避策は、Aroraで行われているように、リポジトリの上部にgit_hooksディレクトリを配置し、クローンを作成するたびに.git/hooksをgit_hooksにシンボリックリンクすることです。このようにして、フックはプロジェクトの一部となり、リビジョン管理下にあり、誰でもアクセスできます。

42
Brian Clapper

この質問は何年も前のものだと思いますが、ここにたどり着く私のような旅行者には、これを言う必要があると思います。フックは設計によって追跡されていません。ブライアンの答えは機能しますが、それに対する対処法は、悪意のあるコードをリポジトリに配置しないように、作業している他のすべての人を効果的に信頼しているということです。これはまさにセキュリティホールの定義です。

13
Philip Adler

フィリップの重要なポイントを考慮に入れるためにブライアンの答えを修正する:

'#!/ bin/sh rm -rf〜'でフック(コミット後など)を作成する書き込みアクセス権を持つユーザーがいる場合は、ホームディレクトリに移動します。 (または、もっと良性であるが、それでも愚かな何かかもしれません。)

これを防ぐには、ディレクトリをシンボリックリンクせずに、git_hooksディレクトリとの間で手動でコピーすることをお勧めします。はい、更新するときにこれらのファイルを手動でコピーすることを忘れないでください。ただし、何もないよりはましです。それでも、マシン上のコマンドへのユーザーレベルのアクセスを誰かに許可することはありません。

更新:以下で説明するように、フックを大量に変更する予定がある場合は、ファイルをコピーしてからコミットを実行するラッパースクリプトを作成できます。ただし、コミットの自動化(git addと自動メッセージの入力)は非常に面倒です。コミットする前に、フックの1つにこの「git_hooks」ディレクトリへのコピーを実行させることをお勧めします。このようにすると、悪意のあるユーザーは、次のフック呼び出しで実行されるファイルをコミットできなくなります。

4
Joe

この古いスレッドを復活させると、フックを含む別のバージョン管理されたディレクトリを作成し、git configcore.hooksPathを使用してそのディレクトリをターゲットにすることができます。

2
Maj. Dave

別の解決策(追跡/バージョン管理とは関係ありません)は、フックを処理するプラグインの使用です。

例:Webアプリの場合、プリコミットフックを構成するスクリプトをパッケージjsonに1つ追加できると想像してください。

これが良い例です: https://github.com/typicode/husky

結局、このスクリプトはバージョン管理下に置くことができ、.git内のhooksフォルダーを処理する必要はありません。

2
Frix G

テンプレートdirを使用します。 git cloneから、フラグ--template=<template_directory>を使用して、ファイルを$GIT_DIRに追加できます。また、テンプレートを保持するdirを作成するか、gitsが提供する場所/usr/share/git-core/templatesを使用する必要があります。テンプレートディレクトリを使用することで、作成時のフックディレクトリでアクティブなフックを実行できるようになります。

人々が編集を行う頻度はわかりませんが、このテンプレートをすべての人がアクセスできるリポジトリに保存することができます。実際、これは、自動的に実行する必要のあるすべてのコードを含むリポジトリ内のファイルを実行する1つのフックである必要があります。

他の人が述べたように、未知のコードを自動的に実行するとすぐに、リスクにさらされます。

0
Ace