検索

An Introduction to Git Hooks

Gitフックの紹介

キーテイクアウト

  • gitフックは、コミットされているファイルの構文をテストするなど、特定のアクションの前後に実行される簡単なスクリプトであり、環境が動作できるあらゆる言語で記述できます。
  • 2種類のフックが存在します。開発者のシステムで実行されるクライアント側と、Gitリポジトリをホストするサーバーで実行するサーバー側。
  • gitフックはプロジェクトに配布されておらず、自動的にインストールすることもできないため、フックがライブをして協力者に使用するように伝える場所を作成することが有益です。
  • gitフックは、プロジェクトのワークフローを自動化するための強力な手段であり、コードを検証し、メッセージをコミットし、環境が適切であることを確認できるようにします。
  • gitフックは、特定のアクションの前後に実行される簡単なスクリプトです。これらはさまざまなタスクに役立ちますが、主にクライアント側の検証に役立つので、簡単な間違いを防ぐことができます。たとえば、コミットされているファイルの構文をテストすることもできます。テストを実行することもできます。 Twig Syntaxを検証し、Jshintを標準に合わせて実行するフックを書きました。
  • gitフックもデザインで非常にシンプルです。スクリプトが実行可能であり、GITがエラー(ステータス0)でフックが終了する限り、アクション(たとえばコミットまたはプッシュ)が発生する場合、Gitはこれらのフックを実行します。フックは、環境が動作できるあらゆる言語で書くことができます。
  • フックには2種類のフックがあります

クライアント側 - これらは開発者のシステムで実行されます

サーバー側 - これらはgitリポジトリをホストするサーバーで実行

この記事では、サーバー側のフックはカバーされません。ただし、プロジェクトがGitHubのようなサービスにある場合、サーバー側のフックは通常適用されないことに注意してください。 Githubでは、サーバー側のフックに相当するものは、プロジェクト設定にあるサービスとWebhookを使用することです。

フックファイル
  • デフォルトでクローンを含むすべてのリポジトリには、.git/hooksディレクトリにフックのサンプルがあります:
  • そのディレクトリには、次のようなものが表示されます
コミットを許可する前に実行されるコミット前のフックに焦点を当てます。

フックの例:PHP Syntaxの検証

bashで書かれた非常にシンプルなフックから始めます。これは、「迅速な」が壊れたコミットが起こらないようにするためです。もちろん、私はテストをほとんどまたはまったく持たない「単純なコミット」を思いとどまらせますが、それはそれらが起こらないという意味ではありません。 .git/hooksでは、pre-commitという新しいファイルを起動できます。実行する権限が必要です:

<span>git clone git@github.com:symfony/symfony.git
</span><span>cd symfony
</span><span>ls .git/hooks</span>

お気に入りの編集者を使用して書き始めることができます。最初にシバンが必要です。私の好みの方法は、/usr/bin/envを使用することです。これは、ハードコード化された無効なパスではなく、必要なアプリケーションへの正しいパスを使用するためです。今のところ、簡単にテストできるように継続的に失敗します。

applypatch-msg.sample
commit-msg.sample
post-update.sample
pre-applypatch.sample
pre-commit
pre-commit.sample
prepare-commit-msg.sample
pre-push.sample
pre-rebase.sample
update.sample
PHPには、構文検証に便利なオプションがあります:-l。単一のファイル引数がかかるため、PHPファイルが変更されているものをループする必要があります。簡単にするために、コミットされているPHPファイルは常に.phpで終わると想定します。フックはリポジトリのルートから実行されるため、標準のgitコマンドを使用して、gitステータスなどの変更に関する情報を取得できます。

#alwaysフェールラインの上に、以下を使用してすべてのPHPファイルを変更することができます。

説明:

<span>cd .git/hooks
</span><span>touch pre-commit
</span><span>chmod +x pre-commit</span>

php_files = bashの割り当ては区切り文字なしで行われますが、変数を参照するには$ delimiter

が必要であることに注意してください。
    $()は「出力を取得」の構文です。これを使用するために引用符は必要ありません。
  • GREPは、追加された(a)および変更されたファイル(m)
  • を確認するために使用されています
  • awkはここで2ドルを印刷するために使用されています。完全なgitステータス - ショートラインには、開始時に追加のスペースと追加のデータがあるため、削除します。 awkは自動ストリッピングも実行します。
  • grepが再び使用されていますが、今ではラインが.php
  • で終わることを確認しています。
  • ここで、各ファイルをforループで確認できます:

これは少し奇妙に思えるかもしれませんが! php -l "$ i"(スペースの問題を回避するための引用符に注意)は、実際には、他の言語で通常予想される種類の値ではなく、0の返品値をチェックしています。参照のために、ほぼ同等のPHPコードは次のとおりです。

<span>#!/usr/bin/env bash
</span><span># Hook that checks PHP syntax
</span>
<span># Override IFS so that spaces do not count as delimiters
</span><span>old_ifs=$IFS
</span><span><span>IFS</span>=$'<span title="\n">\n'</span>
</span>
<span># Always fail
</span><span>exit 1</span>
これをテストするために意図的にSRC/Symfony/Component/Finder/Glov.phpに悪い変更を加えました。

ループをできるだけ早くループを終了させましたが、これは最終的に私たちが望むものではないかもしれません。実際、コミットしようとし続けなければならないのではなく、修正するものの要約を望んでいるかもしれません。誰でも簡単にイライラすることができ、gitコミットを使用することを学ぶことさえあります - フックを完全にバイパスするためにヴェル化しません。
<span>php_files=<span>$(git status --short | grep -E '^(A|M)' | awk '{ print  }' | grep -E '\.php$')</span></span>

代わりに、PHP -Lでエラーを終了しないようにしましょうが、私はまだ読みやすくしたいと思います:

<span>for file in $php_files; do
</span>  <span>if ! php -l "<span>$i"</span>; then
</span>    <span>exit 1
</span>  <span>fi
</span><span>done</span>
ここでは、PHP -Lの出力をキャプチャします(および標準誤差出力を標準出力に強制します)。特別な変数$を使用して、PHP -Lの出口ステータスを確認しますか? (これは出口ステータスコードです)とオペレーター-EQ。構文エラーが発生したことを述べています(文字列内の変数で$ {}の使用に注意してください)。最後に、エラーの関連する行に、出力をもう少し短くし続ける(「^parse error」のグレピング)を与え、これをもう少し読みやすくするために1つの空白行を与えます。

私は2つの悪い変更を加えました、そして、コミットの試みのための出力は次のように見えます:

<span>git clone git@github.com:symfony/symfony.git
</span><span>cd symfony
</span><span>ls .git/hooks</span>

今の行動方針は、これらの問題を修正し、テストし、再度コミットしようとすることです。

フックスクリプトを完成させるには、スクリプトの下部にある終了1を削除します。有効なPHPファイルをコミットしてみてください。通常どおり機能するはずです。

フックを共有

フックはプロジェクトに配布されておらず、自動的にインストールすることもできません。したがって、あなたの最善の行動は、あなたが住む場所(同じリポジトリにある可能性がある)のための場所を作成し、コラボレーターにそれらを使用するように伝えることです。あなたが彼らのためにこれを簡単にするならば、彼らはそうする可能性が高くなります。

これを行う簡単な方法の1つは、フックディレクトリとそれらをリンクするシンプルなインストーラーインストーラーを作成することです(コピーするのではなく):

あなたのプロジェクトをクローン化する人なら誰でも、単にbash install-hooks.shをクローニングした後に実行できます。
applypatch-msg.sample
commit-msg.sample
post-update.sample
pre-applypatch.sample
pre-commit
pre-commit.sample
prepare-commit-msg.sample
pre-push.sample
pre-rebase.sample
update.sample

これには、フックをバージョン制御下に置いておくという利点もあります。

他のフック

repare-commit-msg - 指定されていない場合はデフォルトのコミットメッセージを提供します。

    Commit-MSG - メッセージの検証をコミットします。
  • コミット後 - 成功したコミットの後に実行されます
  • pre-push - リモコンが動作することを確認した後、gitプッシュの前に実行されます。 2つの議論が必要です:リモートの名前とそれへのURL。
  • 前巻 - gitの前に実行されます。
  • チェックアウト後 - チェックアウトが成功した後に実行されます
  • マージ後 - マージが成功した後に実行されます。
  • これらのフックは一般に、議論を取り入れていますが、事前コミットと同じように機能します。チェックアウト後の1つのユースケースは、ファイルが常に適切な権限を取得することを確認することです(GITは実行可能であり、実行可能リンクではなく実行可能なもののみを追跡するため):
  • [subproject]メッセージのような標準に準拠していることを確認することをお勧めします。これはPHPの1つです:

結論
<span>cd .git/hooks
</span><span>touch pre-commit
</span><span>chmod +x pre-commit</span>

gitフックは、プロジェクトのワークフローを自動化するための強力な手段です。コードを検証したり、メッセージをコミットしたり、環境が適切であることを確認したり、さらに多くのことを可能にしたりできます。 Gitフックを使用しているものはありますか?コメントでお知らせください! gitフックに関するよくある質問(FAQ)

<span>#!/usr/bin/env bash
</span><span># Hook that checks PHP syntax
</span>
<span># Override IFS so that spaces do not count as delimiters
</span><span>old_ifs=$IFS
</span><span><span>IFS</span>=$'<span title="\n">\n'</span>
</span>
<span># Always fail
</span><span>exit 1</span>
さまざまな種類のgitフックは何ですか?

gitフックは、クライアント側とサーバー側のフックの2つの主要なタイプに分割されています。クライアント側のフックは、コミットやマージなどの操作によってトリガーされますが、サーバー側のフックはプッシュコミットの受信などのネットワーク操作で実行されます。各フックは、特定の運用上のニーズに合わせてカスタマイズできます。

gitフックを作成するにはどうすればよいですか?

gitフックを作成し、リポジトリの.git/hooksディレクトリに移動します。ここでは、さまざまなフック用のサンプルスクリプトがあります。新しいフックを作成するには、拡張機能(たとえば、事前にコミット)なしでファイルを作成し、実行可能にし、スクリプトを書き込みます。

自動化にGitフックを使用するにはどうすればよいですか?

Gitフックを使用して、開発ワークフローのさまざまなタスクを自動化できます。たとえば、事前コミットフックを使用して、各コミットの前にテストまたはコードのリナーを自動的に実行できます。これにより、テストされ、適切にフォーマットされたコードのみがリポジトリにコミットされます。これは、バージョンではない.gitディレクトリに保存されているためです。ただし、プロジェクト内の別のディレクトリにそれらを保存し、スクリプトを作成して.git/hooksにシンリンクすることにより、チームと共有できます。 >

gitフックを使用して、プロジェクトまたは会社のポリシーを実施できます。たとえば、サーバー側の事前受信フックを使用して、ポリシーに順守しないプッシュを拒否することができます(たとえば、特定の形式に従わないことをコミットします)。 gitフックを書くために使用できますか?

gitフックはスクリプトであるため、スクリプト言語で書くことができます。デフォルトのサンプルはbashで記述されていますが、PythonやRubyなど、快適な言語を使用できます。 Gitフックは、Gitを他のツールと統合するために使用できます。たとえば、ポストコミットフックを使用して、継続的な統合サーバーのビルドをトリガーするか、問題追跡システムのチケットを更新できます。 gitフックのデバッグは、フックスクリプトからファイルに情報を書き込むことで実行できます。たとえば、コマンドの出力をログファイルにリダイレクトして後で検査することができます。

gitフックを無視できますか?コミット、gitコミットコマンドで–No-verifyオプションを使用できます。これは、フックに実装されたチェックを必要としない小さな変更に取り組んでいる場合に役立ちます。強力で、注意して使用する必要があります。書かれていないフックは、すべてのコミットを拒否したり、データの損失を拒否したりするなど、問題を引き起こす可能性があります。展開する前に、常にフックを徹底的にテストしてください

以上がGitフックの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Deepseekへの最初のAndroidアクセスの背後:女性の力を見るDeepseekへの最初のAndroidアクセスの背後:女性の力を見るMar 12, 2025 pm 12:27 PM

AIの分野での中国の女性の技術力の台頭:Deepseekの女性の技術分野への貢献とのコラボレーションの背後にある物語は、ますます重要になっています。中国の科学技術省からのデータは、女性科学技術労働者の数が巨大であり、AIアルゴリズムの開発においてユニークな社会的価値感度を示していることを示しています。この記事では、携帯電話の名誉に焦点を当て、その背後にある女性チームの強さを探り、Deepseek Bigモデルに最初に接続し、技術の進歩を促進し、技術開発の価値座標系を再構築する方法を示します。 2024年2月8日、Honorは、Deepseek-R1 FullbloodバージョンのBig Modelを正式に立ち上げ、Android Campで最初のメーカーになり、Deepseekに接続し、ユーザーから熱狂的な反応を喚起しました。この成功の背後にある女性チームメンバーは、製品の決定、技術的なブレークスルー、ユーザーを行っています

Deepseekの「驚くべき」利益:理論的利益率は545%です!Deepseekの「驚くべき」利益:理論的利益率は545%です!Mar 12, 2025 pm 12:21 PM

DeepseekはZhihuに関する技術記事をリリースし、Deepseek-V3/R1推論システムを詳細に導入し、初めて主要な財務データを開示し、業界の注目を集めました。この記事は、システムの毎日のコストの利益率が545%に高いことを示しており、グローバルなAIビッグモデルの利益の新たな高値を設定しています。 Deepseekの低コスト戦略は、市場競争において有利になります。モデルトレーニングのコストは同様の製品の1%から5%であり、V3モデルトレーニングのコストはわずか5576百万米ドルであり、競合他社のコストよりもはるかに低くなっています。一方、R1のAPI価格設定は、Openaio3-Miniの1/7〜1/2です。これらのデータは、DeepSeekテクノロジールートの商業的実現可能性を証明し、AIモデルの効率的な収益性も確立します。

Mideaは、最初のDeepSeekエアコンを起動します。AIVoiceInteractionは400,000コマンドを達成できます!Mideaは、最初のDeepSeekエアコンを起動します。AIVoiceInteractionは400,000コマンドを達成できます!Mar 12, 2025 pm 12:18 PM

Mideaは、Deepseek Big Model -Midea Fresh and Clean Air Machine T6を装備した最初のエアコンをリリースします。このエアコンには、環境に応じて温度、湿度、風速などのパラメーターをインテリジェントに調整できる、高度な空気インテリジェントな駆動システムが装備されています。さらに重要なことは、DeepSeek Big Modelを統合し、400,000を超えるAI Voiceコマンドをサポートすることです。 Mideaの動きは、業界での激しい議論を引き起こし、特に白物と大規模なモデルを組み合わせることの重要性を懸念しています。従来のエアコンの単純な温度設定とは異なり、Midea Fresh and Clean Air Machine T6は、より複雑で曖昧な指示を理解し、家庭環境に従って湿度をインテリジェントに調整し、ユーザーエクスペリエンスを大幅に改善します。

2025年のトップ10のベスト無料バックリンクチェッカーツール2025年のトップ10のベスト無料バックリンクチェッカーツールMar 21, 2025 am 08:28 AM

ウェブサイトの構築は最初のステップに過ぎません:SEOとバックリンクの重要性 ウェブサイトを構築することは、それを貴重なマーケティング資産に変換するための最初のステップにすぎません。検索エンジンでのWebサイトの可視性を向上させ、潜在的な顧客を引き付けるために、SEO最適化を行う必要があります。バックリンクは、ウェブサイトのランキングを改善するための鍵であり、Googleや他の検索エンジンにWebサイトの権限と信頼性を示しています。 すべてのバックリンクが有益であるわけではありません:有害なリンクを特定して回避する すべてのバックリンクが有益であるわけではありません。有害なリンクはあなたのランキングに害を及ぼす可能性があります。優れた無料のバックリンクチェックツールは、ウェブサイトへのリンクのソースを監視し、有害なリンクを思い出させます。さらに、競合他社のリンク戦略を分析し、それらから学ぶこともできます。 無料のバックリンクチェックツール:SEOインテリジェンスオフィサー

Baiduの別の国の製品は、Deepseekに接続されていますか?Baiduの別の国の製品は、Deepseekに接続されていますか?Mar 12, 2025 pm 01:48 PM

DeepSeek-R1はBaidu LibraryとNetDiskを支援します。深い思考と行動の完璧な統合は、わずか1か月で多くのプラットフォームに迅速に統合されました。大胆な戦略的レイアウトにより、BaiduはDeepSeekをサードパーティモデルのパートナーとして統合し、それをそのエコシステムに統合します。これは、「ビッグモデル検索」の生態学的戦略の大きな進歩を示しています。 Baidu SearchとWenxin Intelligent Intelligent Platformは、DeepSeekおよびWenxin Bigモデルの深い検索関数に最初に接続し、ユーザーに無料のAI検索エクスペリエンスを提供します。同時に、「Baiduに行くときにあなたが知っている」という古典的なスローガンとBaiduアプリの新しいバージョンは、WenxinのBig ModelとDeepseekの機能も統合し、「AI検索」と「ワイドネットワーク情報の改良」を起動します。

Web開発のための迅速なエンジニアリングWeb開発のための迅速なエンジニアリングMar 09, 2025 am 08:27 AM

コード生成のAIプロンプトエンジニアリング:開発者ガイド コード開発の風景は、大きな変化を遂げています。 大規模な言語モデル(LLMS)と迅速なエンジニアリングのマスタリングは、今後数年間で開発者にとって非常に重要です。 th

GOでネットワークの脆弱性スキャナーを構築しますGOでネットワークの脆弱性スキャナーを構築しますApr 01, 2025 am 08:27 AM

このGOベースのネットワーク脆弱性スキャナーは、潜在的なセキュリティの弱点を効率的に識別します。 Goの同時機能機能を速度で活用し、サービスの検出と脆弱性のマッチングが含まれます。その能力と倫理を探りましょう

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。