2016-12-30 4 views
-1

私のMacでGit 2.8を使用していますが、私のリポジトリから変更をプッシュしてリモートマシンに配布できるように、私の生産マシン(Ubuntu Linux)にGIt postrecieveフックを設定しました。これを行うには、私は、私のプロジェクトディレクトリから、...私は、次のデータとのフック/ポスト受信ファイルを作成し私の生産現場で私のGitリポジトリを履歴を保存しないように設定する方法はありますか?

mkdir ~/appname_production 
    cd ~/appname_production 
    git init --bare 

リモートマシン上で私のローカルマシン上

#!/bin/bash 

GIT_DIR=/home/deploy/appname_production 
WORK_TREE=/home/deploy/appname 
export appname_DATABASE_USER='rails' 
export appname_DATABASE_PASSWORD=‘password’ 

export RAILS_ENV=production 
. ~/.bash_profile 

while read oldrev newrev ref 
do 
    if [[ $ref =~ .*/master$ ]]; 
    then 
     echo "Master ref received. Deploying master branch to production..." 
     mkdir -p $WORK_TREE 
     git --work-tree=$WORK_TREE --git-dir=$GIT_DIR checkout -f 
     mkdir -p $WORK_TREE/shared/pids $WORK_TREE/shared/sockets $WORK_TREE/shared/log 

     # start deploy tasks 
     cd $WORK_TREE 
     bundle install 
     rake db:create 
     rake db:migrate 
     rake db:seed 
     rake tmp:cache:clear 
     rake assets:clobber 
     rake assets:precompile 
     sudo restart puma-manager 
     sudo service nginx restart 
     sudo service unicorn restart 
     # end deploy tasks 
     echo "Git hooks deploy complete" 
    else 
     echo "Ref $ref successfully received. Doing nothing: only the master branch may be deployed on this server." 
    fi 
done 

をこれらのコマンドを実行しました私は

git remote add production [email protected]_server_public_IP:appname_production 

を走ったので、私は、実行時に

git push production master 

ローカルでは、私のプロジェクトはリモートマシンに展開され、展開されます。私の質問は、私はプッシュを行うときに私のリモートマシン上の最新バージョン(頭?)が必要で、リモートマシン上でgitの履歴を保持する必要はない(主にディスクスペースを節約したいからです)。以前のコミット/履歴をすべて保持しないように、私のリモートマシン上に自分のgitリポジトリをセットアップする方法はありますか?リモートマシンはgitリポジトリではないことに注意してください(gitlabsにあります)。

+2

リモートで履歴が必要ない場合は、gitを使用する理由は何ですか?必要なコンテンツのtarballを配信するだけです。あなたは 'git archive'を使ってそれを生成することができます(または単に' tar'を使って作成することができます)。 –

答えて

0

はい、いいえ。 Gitlabsリポジトリをポーリングしたり、変更があったときにデプロイしたり、必要なときに自分自身を起動したりするデプロイメントツールを設定することができます。

Gitlabs does support hooksだから、あなたが定義できるアクティビティで進行中の展開をプッシュするフックをそこにインストールできるはずです。あなたは、このフックを持つ実稼働環境のためだけにgitlab上で個別のリモートプロダクションを持つことさえできます。そのようなフックは、プロダクションサーバーのフックに現在行っているアクションをトリガーすることができ、プロードサーバー上で浅いgit checkoutを追加することができます。

Git自体は実際には展開ツールではありません。たとえあなたがやったような程度までハックすることができます。

関連する問題