2017-11-23 10 views
1

私は現在、当社が開発手順をどのように処理しているかを再構築中です。 DEVからSTAGE/PRODUCTIONサーバにファイル/フォルダを昇格させるために、私たちが常にサーバにsshするのは非常に難しいことです。私は、git環境を簡単にマージできるように設定することをお勧めします。 devブランチをステージブランチに分岐して "プロモーション"を実行します。開発/ステージング/生産のgit checkoutブランチ

このため、新しいプッシュが受信されたときにサーバー上の別の場所にチェックアウトするプロジェクトには3つの異なるブランチが必要です。

3つの異なる環境(DEV-STAGE-PROD)のデータを含む3つのフォルダがサーバー上にあるとします。私はgitのように裸のレポを設定し、その種の何かが可能であるならば、私はgitのと思っていた

Branch checkout schema

:その後、スキーマは多少のようになります。

私はあなたに私が提供できるすべてのお手伝いをしてくれてありがとう! :D

+0

です。これは非常に標準的な設定です。あなたの質問は何ですか? –

+0

さて、私はその解決策をまだ知りませんでしたが、それが私が求めていた理由です。カルロは私にこの素晴らしい解決策を提供しました! –

答えて

1

アイデアは、あなたが--work-tree=/path/オプションを使用して、特定の作業ディレクトリにチェックアウトを得ることができ、サーバー上post-receive hookを使用することで、特定のディレクトリに

を強制 (-fオプション)チェックアウトを設定します。.. 。this Gistによって適合

サンプルコードは、(実行ビットが設定されたファイルhooks/post-receiveとしてサーバーの塗装されていないリポジトリに保存される)とすることができる:

#!/bin/bash 
echo '--- --- --- --- --- --- --- --- --- --- ---' 
echo 'Deploying site...' 
echo '--- --- --- --- --- --- --- --- --- --- ---' 

if ! [ -t 0 ]; then 
    read -a ref 
fi 

IFS='/' read -ra REF <<< "${ref[2]}" 
branch="${REF[2]}" 

# Master Branch 
if [ "PROD" == "$branch" ]; then 
    git --work-tree=/path/to/public/PROD checkout -f $branch 
    echo 'Changes pushed to production site' 
fi 

# Stage Branch 
if [ "STAGE" == "$branch" ]; then 
    git --work-tree=/path/to/public/STAGE checkout -f $branch 
    echo 'Changes pushed to stage site' 
fi 

# Development Branch 
if [ "DEV" == "$branch" ]; then 
    git --work-tree=/path/to/public/DEV checkout -f $branch 
    echo 'Changes pushed to dev site' 
fi 

echo '--- --- --- --- --- --- --- --- --- --- ---' 

チェックアウトのための別の可能なsintaxは

GIT_WORK_TREE=/path/to/test/site git checkout -f 
+0

これを私に助けてくれてありがとう。 私はポスト受信フックを追加するには少し盲目でした;)...標準的な作業ツリー設定以外のものを使用したことがないので、ここであなたがフルフレットのShellscriptを使用していることは私の心には及ばなかった。 –

+0

完璧...役に立つと幸せになる –

+0

BTW ...魅力のように働く! ;) –

関連する問題