2011-10-09 24 views
5

私はWebアプリケーションの作成を始めました。コミット後にgitフックを使用する

私はバージョン管理にGITを使用していますが、同じコンピュータにgitとwebサーバーがあります。 DEV、テストおよび生産私はすべてのDEV、テストや本番アプリケーションを更新するためにコミットした後にgitのフックを使用したい

アプリケーションは3つの環境を持っています。

このためのベストプラクティスは何ですか?

私はこのような何かが必要です - DEVとテスト更新されなければならないメッセージの前に:私はコミット時にメッセージをコミットすると、DEVが自動的

  • を更新する必要があります

    1. は、「テスト」が含まれています。
    2. コミットメッセージにメッセージproductionの前に "production:"が含まれている場合、devとtestを更新する必要があります。

    ありがとう!

  • +4

    ちょっとした提案(より一貫性と利便性が高いからです):devに1つ、テストに1つ、プロダクションに1つを使用してください。 "テスト"するたびに、フックがテスト環境を更新する必要があります(など)。 – KingCrunch

    +0

    ご意見ありがとうございました – Irakli

    答えて

    1

    私はこの問題を解決するために

    #!/bin/bash 
    
    if git log --pretty=format:%s -1 | grep -q "^test: " 
    then 
        #action/update dev/test 
    elif git log --pretty=format:%s -1 | grep -q "^production: " 
    then 
        #action/update dev/test/production 
    else 
        #action/update dev 
    fi 
    

    をフック/ミニbashスクリプトを書いたそれはとても私の最初のbashスクリプトである。これを改善するために助けてください:)

    +0

    ここで 'git checkout -f'を使うと便利です。 – jackyalcine

    1

    リモート中央リポジトリにあなたのコミットを押して話をしている場合は、などgit log -1 --format=%Bのようなものを使用してコミットメッセージを解析し、git push devなどの適切な処置を行いますコミット後フック

    を書くことができますし、そのレポがこれを行う必要がある場合、同様の方法でpost-receiveフックを使用する必要があります。コミットフックは、コミットするクライアントリポジトリで実行されることに注意してください。

    これで、あなたがメッセージで言うことを使用して環境に押し込むことは、適切なワークフローではありません。さまざまなブランチを持つことができます。チェリーはコミットなどを選択できます。testブランチにプッシュすると、テスト環境が更新されるようにフックを設定できます。

    +0

    ありがとうございました!あなたは私を助けました – Irakli

    +0

    あなたは私を助けましたが、完全な答えではありません。この問題について私の新しい投稿を確認してください。再度、感謝します! – Irakli

    2

    イラクリの考え方に基づいて、 、ここで私はとして働いてきたものである...私のレポでポスト受信

    #!/bin/bash 
    
    MESSAGE=$(git log -1 HEAD --pretty=format:%s) 
    
    if [[ "$MESSAGE" == *\[staging\]* ]]; 
    then 
        #action/update staging 
        # another method not being used... 
        # GIT_WORK_TREE=/path/to/working/site/ git checkout -q -f staging 
        echo "NOTE: Beginning Auto-Push to Staging Server... " 
        `git push staging` 
        echo "======================================================== 
    ======== Done! Pushed to STAGING.com ============= 
    ======== Thanks Captain. Keep up the good work! ======== 
    ========================================================" 
    elif [[ "$MESSAGE" == *\[production\]* ]]; 
    then 
        #action/update production 
        echo "NOTE: Beginning Auto-Push to Production Server... " 
        # `git push production` 
        echo "======================================================== 
    ======== Done!!! Pushed to Production.com ======= 
    ======== Test immediately for any errors! ========= 
    ========================================================" 
    fi 
    

    注:

    'git push staging'作業をするには、その作業ツリーに.git/hooks/post-reveiveフックが必要です。私はthis codeを使用しましたが、私は 'umask 002 & & git reset --hard'を追加しました。

    私も、その作業ツリーの.git/configファイルにdenyreciveを追加する必要がありました:

    [receive] 
        denycurrentbranch = ignore 
    

    注2:

    (このセットアップはわずかなために...皆のためではありませんのでご注意くださいish)サイト&ダーティな更新はすばらしです。

    関連する問題