Gitをサーバーにインストールして使う

レンタルサーバーでGitを使う。

Gitがレンタルサーバーで使えるという話を聞いて前々から試してみたかった。

ロリポップの場合

管理画面からSSH接続を有効にする。するとこんな画面になる。

これでSSH接続の準備が完了した。

ロリポップにSSH接続してみる

【環境】Windows10+PuTTYという環境でSSH接続してみる。
PuTTY使いやすいね。

ログインすると"web"と書かれたディレクトリが一つ。
ここはロリポップの公開領域になります。

まず最初に

Gitを入れて何をしたいかというと、ローカルで更新したサイトを無駄な手間を取らないでサーバーを更新したい!といったところです。

  • STEP1 ローカルで作業(ノンベアリポジトリ)
  • STEP2 サーバー側(ベアリポジトリ)で中継
  • STEP3 サーバーの本番環境を更新(ノンベアリポジトリ)

という形を取ります。

ベアリポジトリとかノンベアリポジトリとかは何なのか

ベアリポジトリ

作業ファイルの実体が無く、更新情報だけを持つリポジトリです。

ノンベアリポジトリ

実際の作業ファイルがあるリポジトリです。

最終的にはローカルでプッシュしたら、本番のリポジトリにプルするという命令をサーバー内に用意します。
これでプッシュしたら更新できる、という仕組みです。

これだけ覚えてそれぞれのSTEPの意味を見ていきます。

サーバーにそれぞれのリポジトリを準備

SSHで接続しているのでSTEP2で使う中継用のベアリポジトリを作成します。

ロリポップの場合ログイン直後、ホームディレクトリにいますので
“web"という公開用のディレクトリが一つある状態です。
この"web"と同じ階層にベアリポジトリを作ります。

ここでは"git"というディレクトリを作ります。
“git"というディレクトリを作ったら"git"ディレクトリの中に移動します。
mkdirはディレクトリを作成、cdはディレクトリに移動するLinuxコマンドです。

$ mkdir git
$ cd git

今回はローカルで作成中の"bistro"というサイトを更新したいので
さらに"git"ディレクトリの中に"bistro.git"ディレクトリを作成します。
“bistro.git"というディレクトリを作ったら"bistro.git"ディレクトリの中に移動します。

$ mkdir bistro.git
$ cd bistro.git

ここをSTEP2で使う中継用のベアリポジトリとして用意します。
何故中継用が必要なのか?と思うかもしれませんがどんどんやっていきます。

git init はGitの初期化です。
–bare をつけるとベアリポジトリになるそうです。
さらに –shared をつけるとグループで共有できるようになるそうです。
早速やってみましょう。

$ git init --bare --shared

コマンドを打つと

Initialized empty shared Git repository in /home/users/1/(自分のユーザー名)/git/bistro.git/

と表示されました。
これで中継用のベアリポジトリが作成されたようです。

試しにlsコマンドしてみると

HEAD  branches  config  description  hooks  info  objects  refs

と表示されました。きちんと出来ているみたいです。

次に本番環境用のノンベアリポジトリを作成します。
ここでは本番環境を/web/bistro/とします。
/home/users/1/(自分のユーザー名)/web/bistro
に移動してgit initします。

$ cd web/bistro/
$ git init

とすると

Initialized empty Git repository in /home/users/1/(自分のユーザー名)/web/bistro/.git/

と表示されました。
さらに、

$ git remote add origin /home/users/1/(自分のユーザー名)/git/bistro.git/

とします。
originが突然出てきたけど何?これは一体何をしているのか?というと、

git remote add origin [URL]

でURLが示すリモートリポジトリ先の名前をoriginという名前でエイリアスとして設定しているそうです。
リモートのリポジトリ先の一覧は以下のコマンドで見れます。

$ git remote

とすると

origin

と表示されました。

post-receive を設定する

post-receiveとは一体何か。
bistro.gitディレクトリに移動します。

$ cd /home/users/1/(自分のユーザー名)/git/bistro.git/

lsコマンドを打つと

HEAD  branches  config  description  hooks  info  objects  refs

先程も一度見ましたがこのようなディレクトリがあります。
この"hooks"というディレクトリに移動します。

$ cd hooks

更にlsコマンドを打つと

applypatch-msg.sample  commit-msg.sample  post-commit.sample  post-receive.sample  post-update.sample  pre-applypatch.sample  pre-commit.sample  pre-rebase.sample  prepare-commit-msg.sample  update.sample

このようなファイルが並んでいます。
post-receive.sampleというファイルがありますのでこちらを編集します。(無い場合もあるそうです。)
post-receiveというファイルは、プッシュが処理された後に実行して欲しい命令を書くことが可能です。
Vimでサクッと編集しちゃいましょう。

$ vim post-receive.sample

次のような画面になります。

PuTTYのデフォルト、驚くほど見づらいです。かなりビビります。
https://qiita.com/takanemu/items/04641ce510a605c5835e
ここを参考にして
色を変えてみました。

これでかなり見やすくなりました。

cd /home/users/1/(自分のユーザー名)/web/bistro/
git --git-dir=.git pull origin master

と追記して設定しました。
ここまででサーバー側の設定は完了です。

ローカルで更新してPushしてみる

これでローカルで更新してpushすればサーバー側も更新されるはずです。
ローカルに"bistro"ディレクトリを作ります。

ここからはローカルで作業です。
Windows環境なので例えばこんなふうにディレクトリを作っておきます。
C:\xampp\htdocs\bistro

ここにGit Bashなどでアクセスします。
予め、WindowsにGitをインストールしておきましょう。

ここからインストールできます。
Git For Windows

Git BashでC:\xampp\htdocs\bistroを開いたら
各種設定を済ませます。
自分の名前とメールアドレスを設定します。

git config --global user.name "xxx"
git config --global user.e-mail "xxx@xxx.xxx"

日本語ファイル名の文字化けの回避設定をしておく。

git config --global core.quotepath false

そして先程サーバーに作ったリポジトリに接続する設定を行います。
ssh://ユーザー名@ホスト/ベアリポジトリのルートからのパス

で設定できるようです。
試しにローカルのbistroディレクトリに"index.html"のようなファイルを作って

git push ssh://(自分のユーザー名)@(自分のサーバー番号).phy.lolipop.jp:2222/home/users/1/sub.jp-13cweb/web/git/bistro.git

これでプッシュできます。

git clone ssh://(自分のユーザー名)@(自分のサーバー番号).phy.lolipop.jp:2222/home/users/1/sub.jp-13cweb/web/git/bistro.git

これでクローンできます。

これで理想の環境ができあがりました。

Git

Posted by bistro