web-dev-qa-db-ja.com

ライブサーバーへのGitプッシュ

すべてのPHP/HTML/JS/CSS/etcファイルがGitリポジトリに保存されているWebサイトがあります。

現在、リポジトリには3種類のコンピューター(またはユースケース)があります。

  • ローカル開発者:最新の変更のプル、変更、ローカルリポジトリへのコミット、マスターサーバーへのプッシュ
  • マスターサーバー:中央リポジトリ、すべての変更がマスターサーバーにプッシュされます
  • Webサーバー:Webサイトの展開時にマスターサーバーから変更が取得される

そのため、現在、次のことを行っています。

local: git Push Origin master
local: password: ********
local: ssh [email protected]
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: ********
48
Petah

はい、ウェブサーバーに直接プッシュできますが、--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/

お役に立てれば!

37
ralphtheninja

私は同じクエリを持っていて、ここで現在トップ投票された答えに満足していませんでしたが、最終的に git-website-howto になりました。これはプロセスをかなりうまく概説し、IMOははるかにクリーンで迅速なアプローチです。

TL; DR、git init --bareを使用して、開発マシンから変更をプッシュするWebサーバーに新しいリポジトリを作成します。 Webリポジトリが変更を受信すると、受信後フックを起動し、ファイルをWebルートにコピーします。

Post-receiveフックがサーバーで作業を行うため、ローカルマシンがはるかに高速にプッシュして解放できるため、このアプローチが気に入っています。これにより、特定のブランチのリモートトラッキングの設定も非常に簡単になります。そのため、あなたのマスターが開発用であり、他の場所のgitリポジトリにリンクしている間に、productionというブランチを使用してWebサーバーを更新できます。

注:プッシュ時にローカル開発ボックスで警告を抑制するには、Webサーバーリポジトリでgit config receive.denycurrentbranch ignoreを実行する必要があります。

29
aleemb

http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-Push.html のgit urls部分を見てください

だからあなたは試してみます:

git Push ssh://[email protected]/~admin/domain.com/ master

追加:あなたが求めているのは、複数のリモートリポジトリを持つ方法だと思います。

git remote add webserver ssh://[email protected]/~admin/domain.com/

以下を実行できます:

   git Push Origin master
   git Push webserver master
10
Tim Hoolihan

あなたが探している機能はここで説明されていると思います: 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
4
cmcginty
  1. リモートを追加$ git remote add server ssh://server_hostname:/path/to/git/repo
  2. サーバー上の一時ブランチをチェックアウト$ git checkout -b temp
  3. プッシュ変更$ git Push server
  4. 前のブランチをチェックアウトして、一時的なブランチを削除します$ git checkout - # shorthand for previous branch, git checkout @{-1} $ git branch -d temp

詳細な背景情報があります: https://medium.com/@2upmedia/git-Push-to-live-server-5100406a26

1
2upmedia

ローカルの変更を展開する前に、ターゲットサーバーで何か変更があったかどうかを確認します。

展開スクリプトに追加して、サーバーで何も変更されていないことを確認します。

$ git ls-files -dmo --exclude-standard

変更されていないファイルがある場合は空になります。gitステータスを解析するよりも簡単です

0
Rohan Khude