私はGitフックを調べ始めたばかりですが、実行させることはできません。
ローカルリポジトリを設定したため、プロジェクトフォルダーに「.git」ディレクトリが作成されました。 「pre-commit.cmd」という名前のC:/path/to/my/project/.git/hooksディレクトリに「.cmd」ファイルを追加しました。このファイルの内容は次のとおりです。
echo "HOOK RUNNING"
echo. 2>C:/path/to/my/project/.git/hooks/EmptyFile.txt
これにより、テキスト「HOOK RUNNING」がエコーされ、そのディレクトリに空のテキストファイルが作成されます。ただし、IDE(NetBeans)を使用して変更をコミットする場合、またはGit Bashを使用してコミットする場合、ファイルは作成されないため、どちらも事前コミットフックを実行しないようです。
私が理解しているのは、実行するフックを取得するためにあなたがしなければならないことは、フックの名前を持つ実行可能ファイルを追加することです(私がやったように)。私は何か間違っていますか?
注:これはWindows 7 PC上にあります。
フックの名前をpre-commit
(拡張子なし)にするとどうなりますか?
編集:そして、最初の行に#!/bin/sh
を追加するか、#!/bin/bash
(コメントで提案)
おそらくpre-commit
ファイルを実行する権限がありません
ターミナルで実行します:
chmod +x .git/hooks/pre-commit
アイデアを与えてくれた@vaughanに感謝
私にとっては、上記の解決策はどれもうまくいきませんでした。事前コミットファイルをフックから他の場所に移動し、フックからファイルを効果的に削除しました。
それは私のために働いた:D
私の場合、_npm install
&誤って削除された。git folder、npm install pre-commit --save
働いた
Git for WindowsでのGitフックworkは、デフォルトでgitフックスクリプトが単純であると仮定して。
注意してください: Git はシェル用に作成されました 解釈 ;したがって、WindowsコマンドプロンプトまたはWindows製のPowerShellでgitフックを使用すると、本質的に欠陥があり、完全な 相互運用性 は期待できません。
Windowsでgitフックを使用することは可能ですが、多くの欠点があります。
Git for Windows は、bashおよびシェルコマンドを可能にするシェルエミュレーターを使用します。つまり、gitフックがgitによってアクティブ化されると、Windowsバージョンはシェルエミュレーターを使用してコマンドを実行します。次に、これらのシェルコマンドをWindowsオペレーティングシステムが理解できるコマンドに変換します。意味のある単純なシェルスクリプトは、すぐに動作します。たとえば、gitリポジトリの初期化に付属するgitフックpre-commit
は、変更なしで実行できます。
git init
を使用してgitリポジトリを初期化しますcd .git\hooks
コマンドでgit hooksディレクトリに移動しますこのディレクトリには、すべてのgitフックスクリプトが保持されます。 pre-commit
という名前のファイルを作成します
ファイルの名前は重要です
内容を次のシェルスクリプトに置き換えます
#!/bin/sh
echo "Hello, World!"
test.txt
コマンドを使用してecho "something" > text.txt
という名前のファイルを作成しますgit add test.txt
を使用して、コミットするファイルをステージングしますgit commit -m "test commit"
を使用してプリコミットフックがアクティブになるのを確認しますgit commit -m "test commit"
Hello, World!
[master f00ccea] test commit
非常に高度なシェルスクリプトを使用してgitフックで処理を行う場合、Windowsシェルの解釈が常に重なるとは限りません。たとえば、NPM用のハスキーgitフックプラグインをきれいなフォーマッターと一緒に使用する場合、コマンドは1-1をマップしません。コミット前のgitフックがWindowsで失敗することを意味します。
Gitフックは実行可能なスクリプトです。ただし、シェルスクリプト(.cmd
)ではなく、コマンドプロンプトスクリプト(.sh
)を使用しています。 Windowsオペレーティングシステムで説明したこの動作が必要な場合は、pre-commit
という名前のファイルを作成し、.git\hooks
ディレクトリに配置します(作業中のプロジェクトに対して)。次に、そのファイルに次のコンテンツを配置します。
。git\hooks\pre-commit
#!/bin/sh
echo "HOOK RUNNING"
thisCausesError 2> .git/hooks/EmptyFile.txt
Gitフックが機能し、HOOK RUNNING
という単語をコンソールに出力し、thisCauseError
がエラーメッセージをstderr
に出力し、ファイルEmptyFile.txt
。
多分それは誰かを助けるでしょう-私の場合、私はcore.hooksPath
を間違ったディレクトリに設定していました。 git config --global core.hooksPath '~/.githooks'
でリセットすると問題が解決しました:)