gitフックの変更を追跡する方法はありますか?他の開発者がフェッチするときではなく、自分のマシンにのみ表示される3つのフックがあります。しようとしてもうまくいきgit add
ません。
6 に答える
http://benjamin-meyer.blogspot.com/2008/10/git-hooks.html
.git / hooksディレクトリ内のファイルはリポジトリの一部ではないため、追跡されません。回避策は、Aroraで行われているように、リポジトリの上部にgit_hooksディレクトリを配置し、クローンを作成するたびに.git/hooksをgit_hooksにシンボリックリンクすることです。このようにして、フックはプロジェクトの一部となり、リビジョン管理下にあり、誰でもアクセスできます。
この質問は何年も前のものだと思いますが、ここにたどり着く私のような旅行者には、これを言う必要があると思います。フックは設計によって追跡されていません。ブライアンの答えは機能しますが、それとの取引は、悪意のあるコードをリポジトリに配置しないように、作業している他のすべての人を効果的に信頼しているということです。これはまさにセキュリティホールの定義です。
この古いスレッドを復活させると、フックを含む別のバージョン管理されたディレクトリを作成し、を使用しgit config
core.hooksPath
てそのディレクトリをターゲットにすることができます。
フィリップの重要なポイントを考慮に入れるためにブライアンの答えを修正する:
'#!/ bin / sh rm -rf〜'でフック(たとえば、post-commit)を作成する書き込みアクセス権を持つユーザーがいる場合は、ホームディレクトリに移動します。(または、もっと良性であるが、それでも愚かな何かかもしれません。)
これを防ぐには、ディレクトリをシンボリックリンクせずに、git_hooksディレクトリとの間で手動でコピーすることをお勧めします。はい、これらのファイルを更新するときは手動でコピーすることを忘れないでください。ただし、何もないよりはましです。それでも、ユーザーレベルでマシン上のコマンドにアクセスすることはできません。
更新:以下で説明するように、フックを大量に変更する予定がある場合は、ファイルをコピーしてからコミットを実行するラッパースクリプトを作成できます。ただし、コミットの自動化(git addと自動メッセージの入力)は非常に面倒です。コミットする前に、フックの1つにこの「git_hooks」ディレクトリへのコピーを実行させることをお勧めします。このように、悪意のあるユーザーは、次のフック呼び出しで実行されるファイルをコミットできなくなります。
別の解決策(追跡/バージョン管理とは関係ありません)は、フックを処理するプラグインを使用することです。
例:Webアプリの場合、プリコミットフックを構成するスクリプトをパッケージjsonに1つ追加できると想像してください。
これが良い例です: https ://github.com/typicode/husky
結局、このスクリプトはバージョン管理下に置くことができ、.git内のhooksフォルダーを処理する必要はありません。
テンプレートdirを使用します。--template=<template_directory>
git cloneから、にファイルを追加するためのフラグを使用できます$GIT_DIR
。また、テンプレートを保持するdirを作成するか、gitsが提供する場所を使用する必要があります/usr/share/git-core/templates
。テンプレートディレクトリを使用することで、作成時のフックディレクトリでアクティブなフックを実行できるようになります。
あなたの人々がどれくらいの頻度で編集を行うかはわかりませんが、このテンプレートをすべての人がアクセスできるリポジトリに保存することができます。実際、これは、自動的に実行する必要のあるすべてのコードを含むリポジトリ内のファイルを実行する1つのフックである必要があります。
他の人が述べたように、未知のコードを自動的に実行するとすぐに、リスクにさらされます。