リモートリポジトリーの変更をサーバー側へ反映する方法まとめてみた!
勉強を兼ねて、WEBアプリの開発をしているのだが、デプロイする際、git
コマンドで悩んだので、備忘のためにもまとめておく。
普段から、Git
を用いての開発は行なっているのだが、SourceTree
などのいわゆるGUIベースのツールでサラサラっと流してしまっていたので、いざWEBサービスのデプロイに際して、CUI(コマンドライン)ベースで操作するにちょっと詰まった。
間違えた操作をしてもいいか!?と割り切りも考えたが、WEBサービスの場合は一旦デプロイ済みだと突然サービスが死ぬ、もしくはおかしくなってしまうことが考えられ、結果既存ユーザーのユーザビリティ低下は半端ない…よって、やっぱり慎重にやらなきゃね!?ってことです。
この点、単純なネイティブアプリの開発とは違うところだな〜と、一つ勉強になった。
そもそもいきなり本番サーバーにあげるのではなく、一旦テスト環境にデプロイして、最終検証後のリリースが然るべき手続きではあるが、今は勉強中でもあるので、そこのところは割り切り!!
今後、デプロイの自動化もやってみたい
<イメージ>
- ローカル開発
- リポジトリへ
git push
- テスト環境で自動検知 & 更新(
git pull
) - テスト環境で自動テスト (& エラーがあったら通知)
- 本番環境でテスト成功を検知 & 更新(
git pull
)
が、とりあえずは先の話。
環境
クライアントPC
- MacOSX 10.13.4
サーバー
サーバー側の環境には依存しない
但し、サーバーへSSH接続できることを前提とする。
サーバーの環境構築とSSH設定の詳細に関しては、
ConoHa VPS の Debian9 に Djangoベースのサービスデプロイしてみた!!〜その①〜
SSH conf を簡単に接続する方法まとめた!
を参照
あと肝心のgit
がインストールされていること
git
のインストール方法
Debian(もしくはUbuntu)へのインストール
$ apt-get install git
Step1. ローカルの変更をリポジトリにpush
本稿のメインではないので詳細は割愛するが、ローカル(手元)でWEBアプリを開発し、一通りのデバックが完了したら、いよいよデプロイできるので、全てのコードをgit push
すして、リモートリポジトリへ!!
ちなみに
git
のインストールに関しては、GUIベースのツールsource treeをインストールすると全て解決する
Step2. サーバー側のコードを更新
ローカルで完成したアプリをgit push
したら、サーバー側ではリモートリポジトリからそれらを入手して、更新が必要になる。この結果WEBサービスが最新へと更新される。
まずサーバー側に変更がないことを確認
$git status
On branch master
Your branch is up-to-date with 'xxx/master'.
nothing to commit, working tree clean
基本的にサーバー上で直接コードを編集することはないので、nothing to commit, working tree clean
(訳:特に変更はないよ)であることを確認
以下のコマンドで、最新のコードを入手
$ git pull
エラーメッセージが出なければ完了!非常に簡単!!
<ポイント>
どこのリモートリポジトリからgit pull
してくるか?に関しては以下のコマンドを実行するとわかる$ git remote -v bitbucket https://hogehoge@bitbucket.org/hogehoge/xxx.git (fetch) bitbucket https://hogehoge@bitbucket.org/hogehoge/xxx.git (push)
補足:pull
とfetch
の違い
git
コマンドを調べていくと、pull
とfetch
が似ていることがわかる。
今回もここで少し悩んだので、ざっと違いをまとめてみる。
git pull
リモートリポジトリからデータを全て取ってきて、手元のデータを更新!!
手元とリモートを同じ状態にするので、「同期」するイメージ。
この場合、merge
したい変更がある場合には大変なことになるので、注意が必要!!
最悪、事故ってgit pull
しちゃった場合も、戻したい先のIDを調べて、
git reset --hard ID--
で元に戻せるから大丈夫!!
<ポイント>
一応事前のgit status
で確認、回避できるから安心
git fetch
リモートリポジトリの変更履歴だけをとってくる。手元のデータは更新しない!!
リモートと手元と同じブランチで作業していて、且つmerge
情報がある場合にはこちらがオススメ!!