git pushでVPS上のHTMLを更新する方法です。通常、gitではリモートはbareリポジトリにし、そこに対してローカルからgit pushします。bareリポジトリはgitの変更履歴等のみを保持するリポジトリで、チェックインしたファイルがそのまま配置されるわけでないです。scp的な感覚でgit pushしてリモートのコードを変更したい場合は、non-bareなリポジトリをリモートに作ります。
前提
前提として、複数人でgit pushしない運用になっていることです。git config --add receive.denyCurrentBranch ignoreはどう危険なのか - 西尾泰和のはてなダイアリーを参照。個人的なサイトであれば問題ないと思います。
リモートにnon-bareなリポジトリを作る
cd /var/www/sites-available/
git init example-site.com
git config --local receive.denyCurrentBranch updateInstead
receive.denyCurrentBranch updateInstead
をセットしておかないと次のようなエラーになりgit pushできません。
Counting objects: 368, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (327/327), done.
Writing objects: 100% (368/368), 76.40 MiB | 1.97 MiB/s, done.
Total 368 (delta 35), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
ローカルからpushする
git remote add origin example.com:/var/www/sites-available/example-site.com
git push -u origin master
ここのexample.com:/var/www/sites-available/example-site.com
の部分は、ホスト名:.gitがあるディレクトリのパス
にします。
ホスト名の部分は、ローカルマシン(OSXなど)の$HOME/.ssh/config
に設定したホスト名です。
Host example.com
User bob
Port 2222
まとめ
- 個人的なサイトなのでscp感覚でgit pushでサーバにソースをデプロイしたい
- リモートは
git config --local receive.denyCurrentBranch updateInstead
でnon-bareなリポジトリを作る - ローカルは
git remote add origin example.com:/var/www/sites-available/example-site.com
のようにしてremoteを追加しておく