私は共有ホスティングの下で同じウェブホスティングサービスですべてホストされているいくつかのサイトを持っています。私のWebホストはGitをサポートしており、SSHにアクセスできます。ラップトップでもGitをセットアップできます。
「git push origin master」を実行すると、Webサーバー上のファイルが自動的に更新され、以前のコミットのファイルのバックアップも保存されるため、必要に応じて簡単にロールバックできます。これは可能ですか?
私は共有ホスティングの下で同じウェブホスティングサービスですべてホストされているいくつかのサイトを持っています。私のWebホストはGitをサポートしており、SSHにアクセスできます。ラップトップでもGitをセットアップできます。
「git push origin master」を実行すると、Webサーバー上のファイルが自動的に更新され、以前のコミットのファイルのバックアップも保存されるため、必要に応じて簡単にロールバックできます。これは可能ですか?
回答:
これは、Gitを使用してWebサイトを管理するから要約されています
プロセスの鍵は、サーバー側フック「post-receive」です(Gitフックの詳細については、Gitのカスタマイズ-Git フックとgithooksのマニュアルページを参照してください)。このフックは、サーバーがすべてのデータを受信した後に実行されます。
サーバーがデータを受信すると、サーバーは実行され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設定をジャグリングする必要はありません)。
ロールバックするには、各リリースにタグを付ける必要があります(これは、コミット後フックの一部としても実行できます)。リリースにタグを付けることで、ロールバックするスポットを簡単に識別できますが、おそらくサーバーにログインしてそのタグをチェックアウトする必要があります。
post-receive
フックですべてを行うことができます。これは実際には、必要なものを何でも入れることができるスクリプトです。
プッシュするリポジトリの作業ツリーを更新する最も簡単な方法は
git config receive.denyCurrentBranch updateInstead
、受信側で設定
することです。https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranchを
ご覧ください
コミット後のフックに関するRyanの答えは、いくつかの異なる場所にチェックアウトできるという点で優れています(Webフォルダーに.gitを入れたくないでしょう)。ただし、このレベルでは、sleskeがコメントで述べたように、既存の展開ツールを使用することをお勧めします。