Webホストで「git push」更新ファイルを作成する方法は?


13

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

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


好奇心が強い-あなたのホスティングプロバイダーは誰ですか?
ユーザー

そして、なぜ「以前のコミットのファイルのバックアップ」が必要なのでしょうか?ロールバックしたい場合は、前のコミットをプッシュすることができます(最後にプッシュしたものを常に知っていると仮定します-とにかくそれを知っておく必要があります)。
sleske

回答:


12

これは、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設定をジャグリングする必要はありません)。

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


これは、gitを展開ツールとして使用していることを意味することに注意してください。これは、実際には意図されていないものです。動作しますが、多くの制限があります(リポジトリ全体をダウンロードする必要があり、スクリプトを起動したり、ファイルのアクセス権を管理したり、アイテムを解凍したりする必要はありません...)。適切な展開ツールを使用することをお勧めします。
sleske

@sleske post-receiveフックですべてを行うことができます。これは実際には、必要なものを何でも入れることができるスクリプトです。
マリオ

@マリオ:はい、できます-つまり、独自の展開ソリューションを受信後フックとして効果的に実装しているということです。既存のソリューションを使用することにはまだ利点がありますが、自分でロール
バック

中間フォルダーにチェックアウトし、Webフォルダーから中間フォルダーへのリンクを設定して、Webフォルダーに.gitファイルが含まれないようにすることもできます。
ベント

0

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

コミット後のフックに関するRyanの答えは、いくつかの異なる場所にチェックアウトできるという点で優れています(Webフォルダーに.gitを入れたくないでしょう)。ただし、このレベルでは、sleskeがコメントで述べたように、既存の展開ツールを使用することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.