2017-09-13 9 views
0

私はソースコードで1つのディレクトリでローカルに作業します。私はmasterとdevの2つの枝を持っています。専用のサーバーを各自のディレクトリに移動して、本番用のディレクトリと開発用のディレクトリを作成したいと考えています。次に、サブドメインなどにアクセスするためのNginxを設定することができます。独立したgitディレクトリ(master/dev)

このコードを、私の(only)project.git/hooks/post-receiveの受信ファイルに使用しようとしました。

#!/bin/bash 

while read oldrev newrev ref 
do 
    branch=`echo $ref | cut -d/ -f3` 

    if [ "master" == "$branch" ]; then 
    git --work-tree=/home/myself/project/site --git-dir=/home/myself/myproject/myproject.git checkout -f 
    echo 'Changes pushed live.' 
    fi 

    if [ "dev" == "$branch" ]; then 
    git --work-tree=/home/myself/myproject/site-dev --git-dir=/home/myself/myproject/myproject.git checkout -f 
    echo 'Changes pushed to dev.' 
    fi 
done 

devブランチの変更をコミットしようとしました。私はそれをうまくプッシュします( "Changesはdevにプッシュされました")。しかしdevディレクトリは私のリモートサーバ上では全く変更されていません(masterブランチと同じ)。

お願いします。

ありがとうございます!

+1

Gitはリリースツールではありません。リリース用に使うことはできますが、うまくいきません。代わりにリリースツールを調べることをお勧めします。 – Schwern

+0

確かに。変更があったときはいつでも、あなたのリポジトリからリリースプロセス*を引っ張っておくべきです。これは引き続き複数の異なる方法であなたを噛んでいきます。 – eis

+0

ありがとう、私は古典的な方法(プッシュとディレクトリにプル)に行く:) – Zoloom

答えて

0

コメントで既に述べたとおりです。 Gitは本当にデプロイツールではありません。 git-post-recvを実行して、実際のデプロイメントを行うためのデプロイツールを起動させる必要があります。

しかし、展開スクリプトは、上記のフックと非常によく似ていて、おそらく同じ問題が発生します。不足していると思われる部分は、実際にブランチをsite-devディレクトリでチェックアウトするように選択することです。コマンド

git --work-tree=/home/myself/myproject/site-dev --git-dir=/home/myself/myproject/myproject.git checkout -f 

は現在のHEAD(通常はマスター)をチェックアウトします。 checkoutコマンドにdevを追加してみてください。

git clean -ffdxのバリエーションを追加して、gitで知られていないすべてのファイルを削除することもできます。そのため、元のチェックアウトがあります。

関連する問題