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