ライブサーバーへのGitプッシュ
すべてのPHP/HTML/JS/CSS/etcファイルがGitリポジトリに保存されているWebサイトがあります。
現在、リポジトリには3種類のコンピューター(またはユースケース)があります。
- ローカル開発者:最新の変更のプル、変更、ローカルリポジトリへのコミット、マスターサーバーへのプッシュ
- マスターサーバー:中央リポジトリ、すべての変更がマスターサーバーにプッシュされます
- Webサーバー:Webサイトの展開時にマスターサーバーから変更が取得される
そのため、現在、次のことを行っています。
local: git Push Origin master
local: password: ********
local: ssh admin@webserver.com
webserver: password: ********
webserver: cd ~/domain.com/
webserver: git pull Origin master
私の質問は、ローカルコンピューターからWebサーバーに直接プッシュする方法はありますか?
すなわち。
local: git Push Origin master
local: password: ********
local: git Push webserver master
local: password: ********
はい、ウェブサーバーに直接プッシュできますが、--bare引数でクローンされたリポジトリにのみプッシュする必要があるため、お勧めしません。メインリポジトリがWebサーバー上のリポジトリを自動的に更新できるように、gitフックシステムを利用します。 post-updateフックをチェックアウトします:
http://git-scm.com/docs/githooks
このスクリプトは、sshを介してWebサーバーにログインし、
cd ~/domain.com/
git checkout master
git pull Origin master
この方法では、中央サーバーへのプッシュにのみ集中する必要があり、Webサーバーを気にする必要はありません。プッシュが行われると、常に更新されます。何かを自動化できるなら、それを自動化してください:)
スクリプトでsshを介してログインすることについての素敵な記事を見つけました(パスワードを使用する必要がある場合、ssh-keyがセットアップされていれば簡単です)。
http://bash.cyberciti.biz/security/expect-ssh-login-script/
お役に立てれば!
私は同じクエリを持っていて、ここで現在トップ投票された答えに満足していませんでしたが、最終的に git-website-howto になりました。これはプロセスをかなりうまく概説し、IMOははるかにクリーンで迅速なアプローチです。
TL; DR、git init --bare
を使用して、開発マシンから変更をプッシュするWebサーバーに新しいリポジトリを作成します。 Webリポジトリが変更を受信すると、受信後フックを起動し、ファイルをWebルートにコピーします。
Post-receiveフックがサーバーで作業を行うため、ローカルマシンがはるかに高速にプッシュして解放できるため、このアプローチが気に入っています。これにより、特定のブランチのリモートトラッキングの設定も非常に簡単になります。そのため、あなたのマスターが開発用であり、他の場所のgitリポジトリにリンクしている間に、production
というブランチを使用してWebサーバーを更新できます。
注:プッシュ時にローカル開発ボックスで警告を抑制するには、Webサーバーリポジトリでgit config receive.denycurrentbranch ignore
を実行する必要があります。
http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-Push.html のgit urls部分を見てください
だからあなたは試してみます:
git Push ssh://admin@webserver.com/~admin/domain.com/ master
追加:あなたが求めているのは、複数のリモートリポジトリを持つ方法だと思います。
git remote add webserver ssh://admin@webserver.com/~admin/domain.com/
以下を実行できます:
git Push Origin master
git Push webserver master
あなたが探している機能はここで説明されていると思います: http://debuggable.com/posts/git-tip-auto-update-working-tree-via-post-receive-hook:49551efe-6414- 4e86-aec6-544f4834cda
local
から、他の操作と同様に、ウェブサーバーをリモートとして追加できます。
git remote add webserver admin@webserver:/path/to/repo.git/
# Push only master branch by default
git config remote.webserver.Push master
プッシュの準備ができたら、次のようにします。
git Push webserver
- リモートを追加
$ git remote add server ssh://server_hostname:/path/to/git/repo
- サーバー上の一時ブランチをチェックアウト
$ git checkout -b temp
- プッシュ変更
$ git Push server
- 前のブランチをチェックアウトして、一時的なブランチを削除します
$ git checkout - # shorthand for previous branch, git checkout @{-1} $ git branch -d temp
詳細な背景情報があります: https://medium.com/@2upmedia/git-Push-to-live-server-5100406a26
ローカルの変更を展開する前に、ターゲットサーバーで何か変更があったかどうかを確認します。
展開スクリプトに追加して、サーバーで何も変更されていないことを確認します。
$ git ls-files -dmo --exclude-standard
変更されていないファイルがある場合は空になります。gitステータスを解析するよりも簡単です