gitでサイト更新
gitを利用したサイト更新を試したのでやった事を備忘録。
作業環境はmacOS High Sierra、サーバーはさくらVPS
## 準備する
gitはインストール済みだったので、git-flowをインストール
GUIにSourcetreeをインストール
Sourcetreeを起動してローカルリポジトリを追加。
作業ツリーのファイルを選択してindexにステージしてコミット。
メニュー「リポジトリ」から「Git flow」→「リポジトリの初期化」を実行。
*コミット前に初期化を実行すると「製品ブランチを〜」ってエラーが出る。
## サイトの編集をする
メニュー「リポジトリ」から「Git flow」→「次のアクション...」を選択(command + option + F)、
ダイアログの「新規フィーチャーを開始」クリック。
もしくは「リポジトリ」から「Git flow」→「新規フィーチャーを開始」クリック。
名前を付けてOKをクリック。
*開始の選択で「最新の開発ブランチ」「作業コピーの親」「指定のコミット」ってあるけどgit自体を触り始めたばかりで謎めいている。
左ペインのブランチにfeature/〇〇っていうブランチが出来、太字+文字左側に○がついた状態になる。
ここからファイルの編集をしたり追加したり削除したりする。
【ファイルの削除の注意点】
Finderから直接削除するとリモートにpushした時に「あれ?」ってなる。
Sourcetreeの左ペイン、「ワークスペース」のファイルステータスを開き、作業ツリーのファイルから削除するファイルを選択し右クリとかで削除を選択する。
ファイル一覧が表示されない時は「検索」フォームの左側に
「保留中のファイルを表示」など絞り込みされている状態なので「すべてのファイル」を選択すると表示される。
*絞り込みの選択は位置やサイズで地味に解りづらい気がする
作業が終わったら作業ツリーの編集したファイルを選択しコミットする。
コミット時のコメントは「git コメント」で検索すると書き方が出てくるので参考にする。
面倒でもやった事をしっかり書いておくと良いみたいだ。
あと、コミットは編集がある程度進んでキリが良いところでしておくと良いらしい。
セーブデータは小まめに作っておけって事ですね。
編集が終わってコミットし終わったら、「リポジトリ」から「Git flow」→「フィーチャーを終了」をクリック。
もしくは「次のアクション」でダイアログを表示して「現在のブランチを終了」。
featureがdevelopにマージされる。
この段階でdevelopをリモートのテスト環境にプッシュしてみたりした。
## サイトアップ準備
編集と同じ流れで「新規リリースを開始」、バージョンを入力してOK。
ここでする事がいまいち分からない。そのうち必要性を感じるんだと思う。
編集していればコミットして、「リリース終了」
releaseがmasterとdevelopにマージされる。
masterをリモートのorigin/masterにプッシュ。
## リモートの設定
詳しくは「git サイト 自動」を検索。
主に[ここ](https://tapioca-hiroyuki.net/?blog=git0320)を見ていた気がする。
サーバーにsshで接続。
本番を「www」、テストを「test」、bareリポジトリを「git」内に。
/home/xxx/
├─www/本番サイトデータ
├─test/テストサイトデータ
└─git/xxx.git
bareリポジトリを設置
gitに移動し、`git init --bare xxx.git`を実行
プッシュされた時に自動で更新されるようにhookを設定する。
git/xxx.git/hooks/に移動しpost-update.sampleをpost-updateにリネームしつつコピー
`cp post-update.sample post-update`
post-updateを編集`vi post-update`
```
# なぜかCGIのパーミッションが775になるので下記追加
umask 0022
# push されたブランチ名が BRANCH に入る
BRANCH=$(git rev-parse --symbolic --abbrev-ref $1)
# ブランチ名で振り分け
case "$BRANCH" in
"develop" | feature*)
cd /home/xxx/develop || exit
unset GIT_DIR
git pull origin develop
git checkout master
git merge develop
;;
release* | hotfix*)
;;
"master")
cd /home/xxx/www || exit
unset GIT_DIR
git pull origin master
;;
esac
# 下記はデフォルトで入っている
exec git update-server-info
```
developをプッシュするとテスト環境が更新され、masterをプッシュすると本番環境が更新されるようにしている。
振り分け部分は「developとmaster」を同時にプッシュすると上手くいかないので、もうちょっと考えたい。
テスト、本番にgitを設定する。
testに移動し、初期設定`git flow init -d`
bareリポジトリと紐付け`git remote add origin /home/xxx/git/xxx.git`
本番の方もテスト同様に設定。