さくらやロリポップのスタンダードプランとかでもSSH接続とか出来ることを恥ずかしながら最近になって知った人間です。
今まであまりGitとか積極的に使おうとしていなかったのですが、
仕事環境の変化とかもあり、今後頻繁にGitを活用していく事になりそうなので、
共用レンサバにGitを設定する手順を覚えておくための、割りと個人的なメモを記します。
ローカル環境はMac。GitクライアントはSourceTreeを使用しています。
ざっくりと
あんまり詳しくないので、よくわからないですが、
リポジトリには2種類あり、
作業ファイルの実体が無く、更新情報だけを持つベアリポジトリと、
実際の作業ファイルがあるノンベアリポジトリというものがある模様です。
ノンベアリポジトリ(ローカル)からプッシュ→ノンベアリポジトリ(サーバー)を更新
というのは良くないらしく、
ノンベアリポジトリ(ローカル)→ベアリポジトリ(サーバー)→ノンベアリポジトリ(サーバー)
という形を取るのが普通のようです。
なので、用意するリポジトリは3つ
- ローカルにノンベアリポジトリ(作業用)
- サーバーにベアリポジトリ(中継する奴)
- サーバーにノンベアリポジトリ(本番)
あとは、サーバーのベアリポジトリに、
「ローカルからプッシュされたら、本番のリポジトリにプルさせてやってくれ」
という命令を与えれば完了するはずです。(手順2 : post-receiveファイルを編集)
手順1 : サーバーにリポジトリ作成
とりあえずサーバーにSSHで接続して、必要なリポジトリを2つ作成します。
黒い画面は早めに終わらせたいのです。
サーバーにSSH接続
ターミナルを開き、サーバーにSSHで接続。
ロリポップの場合はコントロールパネルでSSHを有効にしないと接続できません。
さくらは特に設定は必要ありませんでした。
SSHの接続情報は、ロリポップはSSHを有効にすると教えてもらえます。
さくらはFTPと全く同じです。
1 |
% ssh ユーザー名@ホスト |
1 |
$ ssh ユーザー名@ホスト -p2222 |
パスワードを聞かれるので、入力して接続完了します。
中継用のベアリポジトリを作成
まずサーバーにGit用のディレクトリを用意しておき、
その中にベアリポジトリ用のディレクトリを作成します。
※下記のコードは例なので、コピペしないようにして下さい。
※cdはディレクトリに移動、mkdirはディレクトリを作成
1 2 |
$ cd ~/www/git $ mkdir hoge.git |
gitディレクトリの中にhoge.gitというディレクトリを作成しました。
hoge.gitディレクトリに移動し、Gitを設定します。
1 2 |
$ cd hoge.git $ git init --bare --shared |
git init
でGitを初期化しているわけですが、
--bare
を付ける事で、ベアリポジトリになるようです。
--shared
を付けておかないと、グループで共有できないみたいなので、とりあえず付けておきます。
本番用のノンベアリポジトリを作成
サーバー内の本番の場所に移動して、ノンベアリポジトリを作成し、リモートを追加します。
1 2 3 |
$ cd 本番の場所 $ git init $ git remote add origin ~/www/git/hoge.git/ |
これで、サーバー内に用意する2つのリポジトリが作成されました。
3行目のリモートの追加を忘れないようにしたいです。
originというリポジトリを、リモートとして登録しています。
ちなみに、サーバー内で自分がどこにいるかわからない場合は、
ls や、pwd と打ってEnterを押すと、自分の場所を教えてくれると思います。
手順2 : post-receiveファイルを編集
黒い画面に別れを告げ、ここからは使い慣れたFTPで操作する事ができます。
別に黒い画面にも慣れているよという方は、ベアリポジトリを作成するタイミングでついでにやってしまう方が早いと思います。
ベアリポジトリのpost-receiveファイルを編集
FTPでサーバーに接続、
手順1の最初に作ったベアリポジトリのディレクトリを開きます。
例ではhoge.gitというディレクトリを作りましたので、
hoge.gitの中の「hooks」というディレクトリを開きます。
中にpost-receive.sampleというファイルがあれば、ファイル名から.sampleを削除し、をそのファイルを編集します。
post-receive.sampleが無ければ、新しくpost-receiveというファイルを作成します。
post-receiveというファイルは、例えばJavaScriptで言えばイベントリスナーのようなもので、
プッシュが処理された後に実行して欲しい命令を書くことができます。
今回は関係無いですが、プッシュが処理される前に実行されるpre-receiveというものもあるようで、
プリとかポストなんて言葉はDTMをやっている人なら大変馴染みのある言葉だなぁなんて思ったのですが、完全に余談で申し訳ございませんでした。
post-receiveを下のように編集します。
1 2 3 4 |
#!/bin/sh cd 本番のディレクトリ git --git-dir=.git pull origin master |
プッシュが処理されたら、本番のディレクトリに移動して、
リモートで登録しておいたoriginのmasterブランチからプルしてくださいね。
という命令です。
–git-dir=.gitはよくわかりません。
3行目の本番のディレクトリのパスですが、
ルートからのパスを書いたようが良さそうです。(/home/users/www… みたいな)
~(チルダ)から始まる、ホームディレクトリからのパスを指定するとうまく行きませんでした。
理由はよくわかっていません。
これでサーバー側のGitの設定は終わりました。
あとはローカルです。
手順3 : SourceTreeでローカルリポジトリ作成
SourceTreeを起動し、「+新規リポジトリ」から、「ローカルリポジトリを作成」を選択し、
「保存先のパス」「名前」を入力してリポジトリを作成します。
メニュー→リポジトリ→リモートを追加
を選択するか、
サイドバーの「リモート」の部分で右クリックして「リモートを追加」を選択します。
「リモートの名前」を適当に入力、
「URL/パス」に、手順1の最初に作ったベアリポジトリのURLを、SSHプロトコルで入力します。
ssh://ユーザー名@ホスト/ベアリポジトリのルートからのパス
↓みたいな感じになります。
1 |
ssh://xxx@xxx.sakura.ne.jp/home/xxx/www/git/hoge.git/ |
1 |
ssh://lolipop.jp-xxx@ssh???.lolipop.jp:2222/home/users/?/lolipop.jp-xxx/web/git/hoge.git |
「OK」をクリックすれば完了するはずです。
ローカルにファイルを追加したりしてみて、
プッシュしてサーバーに反映されれば成功です。
以上です。
長いこと書いて疲れました。
何か間違っている事があれば教えてください。
速やかに修正したいと思います。
ありがとうございました。