開発ワークフローを容易にするためにgitフックを使用します


Gitのフックは、特定の重要なイベントがコミット、プッシュ、マージなどのGitリポジトリに発生するたびに、カスタムスクリプトを実行することができます.基本的にgitフックが格納されます.ローカルリポジトリのgit/hookディレクトリ.
最初にすべてのフックファイルが含まれます.拡張子としてのサンプル.これらのサンプルフックは、オペレーティングシステムごとに以下の場所のいずれかに格納されます.
  • Linux :/usr/share/git core/template
  • Windows : C :\プログラムファイル\git\mingw 64\share\git core\テンプレート
  • Mac OS :/usr/local/git/libexec/git core
  • ローカルのGitリポジトリを初期化するときはいつでも、これらのサンプルフックはあなたのマシンに既に格納されているテンプレートをローカルリポジトリにコピーします.
    前のラベルですべてのフックプレフィックスは特定のイベントが起こる前に実行されます、そして、プレフィックスポストでフックはイベントの後に実行されます.
    例えば:プリプッシュフックプッシュ操作前に実行されます.
    フックがデフォルトで無効になっているので、以下の手順を実行する必要があります.
  • は取り外します.フック名からの拡張子.
  • コマンドchmod + x
  • を使用してフックファイルを実行可能にします
    これを思い出す前に
    我々がここで見るように、
  • はフックが中に存在するとわかります.これらを意味するgit/hook/ディレクトリはソース管理ではありません.シンボリックリンクを使用できます.
  • ローカルのGitフックをローカルにバイパスすることができます.
  • Gitフックの実用的な使用から始めましょう.
    シナリオ1 :プロジェクトの一つで、環境ブランチ(マスター、dev、release)から機能ブランチを作成しました.環境ブランチに直接コードをコミットするべきではありません.
    解決策:最初に前commitフックを実行するので、このフックを使用します.前のコミットフックのコードスニペットの下にコピーします.
    #!/bin/sh
    # Avoid doing commit in environment branches.
    
    
    BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
    forbidden_branchs="^(master|dev|release)$"
    
    
    message="You should not commit directly into ${BRANCH_NAME} branch.\nPlease create a new branch from '$BRANCH_NAME' and Try again."
    
    
    if [[ $BRANCH_NAME =~ $forbidden_branchs ]]
    then
        echo -e $message
        exit 1
    fi
    
    ではなく、Windowsオペレーティングシステムでは!ビン/shを使用してください!C :\プログラムファイル\git\bin\sh . exeパスgitがシェルスクリプトをインストールしました.
    今Gitはあなたのスクリプト言語を選択する自由を提供します.Python、Ruby、PowerShellのような他のスクリプト言語で快適であれば、フックの最初の行にそのライブラリのパスを追加する必要があります.
    常に、あなたのフックが0を返すならば、それが成功するということを意味してください.それが他の数で存在するならば、それは失敗します.上記のコードスニペットでは、フックが失敗したことを意味するコード1を終了します.
    シナリオ2 :
    時々我々は複数回コミットを修正し、後の段階でコミットの前の状態の1つを必要とする.コードをコミットする前にstashを作成するスクリプトを書くと、私たちの状態になる.
    解決方法
    if [[ $(git diff --cached --exit-code) ]];then
      BRANCH_NAME=$(git branch --show-current)
      STASH_NAME="pre-commit-on-$BRANCH_NAME-$(date +"%m-%d-%y::%T")"
      git stash save -q --keep-index $STASH_NAME
      echo "Stash:${STASH_NAME} saved!"       
    fi
    
    $( git diff -- cached -- exit code )ステージング領域にコードが存在するかどうかをチェックします.空のコミットのためにこのコードを実行している点が全くないので( git branch -- show current )現在のブランチ名を指定します.
    我々は、同じpre - commitフックを使用します.あなたのpre - commitフックを下に加えてください.
    シナリオ3 :
    ブランチをリモートに押す前に、リモートブランチにコードをプッシュする前に、ビルドとテストを実行するフックを作成できます.
    解決方法
    このシナリオではプリプッシュまたはプリコミットフックを使用できます.
    echo "Running Build"
    sh run-test-scripts.sh
    
    if [ $? -ne 0 ]; then
      echo "Build must be succeed before commit!"
      exit 1
    fi
    
    はい.lastコマンドの終了値を格納します.テストケースを追加し、実行テストスクリプトでコマンドをビルドします.shファイル.このフックを使用して、自動コードの品質チェックを行うことができます.

    これらのgitフックを展開する方法?
    gitフックが格納されるように.git/hookディレクトリで開発者はこれらのフックをコミットできません.我々は、我々自身をつくります.我々のコードベースのGithooksディレクトリ.我々は作成したフックをこの新しく作成されたディレクトリにコピーし、許可をファイルに正しく設定します.chmod a+x ~/.githooks/pre-commit完了!
    別の方法は、Gitのバージョン2.9.0からコアを設定することができます.あなたのマシン上のフックのためのグローバルディレクトリを設定できるようになります.それで、すべてのローカルリポジトリは、そのディレクトリを指し、そこに存在するフックを使用します.
    コアを設定する.以下のコマンドを使用します.
    git config --global core.hookspath <hooks-directory-path>
    
    注意:ローカルリポジトリの外にフックフォルダを置いてください.それ以外の場合は何らかの理由でローカルリポジトリを削除します.あなたの他のプロジェクトはフックにアクセスすることができません.
    Gitのフックの想像力と限界です!linkedin ()
    その記事が役に立つかどうか知らせてください.
    ハッピーコーディング!