web-dev-qa-db-ja.com

Webホストで「git Push」更新ファイルを作成するにはどうすればよいですか?

私はいくつかのサイトを共有ホスティングの下で​​同じWebホスティングサービスですべてホストしています。私のWebホストはGitをサポートしており、それにSSHアクセスできます。ラップトップにもGitセットアップがあります。

「git Push Origin master」を実行すると、Webサーバー上のファイルが自動的に更新され、以前のコミットのファイルのバックアップも保存されるようにしたいので、必要に応じて簡単にロールバックできます。これは可能ですか?

13
Ryan

これは以下から要約されます Gitを使用してWebサイトを管理する

プロセスの鍵は、サーバー側のフック 'post-receive'です(gitフックの詳細は Customizing Git-Git Hooks および githooks man page )。このフックは、サーバーがすべてのデータを受信した後に実行されます。

サーバーがデータを受信すると、サーバーはgit checkout -fを実行します。-fオプションは、ローカルに違いがある場合でも、チェックアウトをヘッドに強制します。

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

これをhooks/ディレクトリにpost-receiveとして配置し、実行可能にします。もちろん、パスはWebサーバーのファイルがある場所に変わります(GIT_WORK_TREEを使用すると、環境変数が設定されるため、サーバー上のドットファイルやgit設定を変更する必要がありません)。

ロールバックするには、各リリースにタグを付ける必要があります(これはポストコミットフックの一部としても行うことができます)。リリースにタグを付けることで、ロールバックする場所を簡単に特定できますが、サーバーにログインしてそのタグをチェックアウトする必要があります。

12
user40980

プッシュするリポジトリの作業ツリーを更新する最も簡単な方法は、受信側でgit config receive.denyCurrentBranch updateInsteadを設定することです。 https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranch を参照してください

コミット後のフックを使用したRyanの回答は、別の場所にチェックアウトできるという点で優れています(Webフォルダーに.gitを入れたくないと思われます)。しかし、このレベルでは、sleskeがコメントで言ったように、既存のデプロイメントツールを使用することをお勧めします。

0
Echsecutor