レンタルサーバでGitを使ってファイルをアップロードして更新できたら楽ですよね。この記事ではさくらのレンタルサーバにGitリポジトリを作成してpushするっていうことをやっていきますよ。
- さくらのレンタルサーバーにベアリポジトリを作成する
- さくらのレンタルサーバーにノンベアリポジトリを作成する
- ローカルからPushして反映させる
さくらのレンタルサーバでGitを使ってコードを管理したい方は見てみてください。
作成するGit構成
今回作成していくGitリポジトリですが、リモートリポジトリをさくらのレンタルサーバに作成します。イメージとしてはこんな感じです。
- ベアリポジトリ・・・更新用のリポジトリ
- ノンベアリポジトリ・・・アプリケーションフォルダもあるリポジトリ
Githubなんかを使っている分にはこのベアリポジトリ・ノンベアリポジトリは意識しないことが多いけど、よくあるやつ。
これを実現させてローカルからpullやpushをできるようにしていきたいと思います。
さくらのレンタルサーバにリモートリポジトリを作成する
さくらのレンタルサーバにベアリポジトリとノンベアリポジトリを作成します。SSH接続して作業したいので、SSH接続してからやっていきます。
SSH接続の方法は以下で書いているので、よかったら確認してみてください。
ベアリポジトリの作成
まずはgitの更新を管理するベアリポジトリを作成します。ファイルなどを持たない方ですね。
SSH接続してgitディレクトリを作成してgit initします。
/home/〇〇
$ mkdir git
$ cd git
$ git init --bare /home/XXX/git/myapp.git
Initialized empty Git repository in /home/XXX/git/myapp.git/
これでベアリポジトリの作成ができました。
ノンベアリポジトリの作成
次はファイルやフォルダも含むノンベアリポジトリを作成します。
$ cd /home/XXX/www
$ mkdir myapp
$ cd myapp
$ git init
Initialized empty Git repository in /home/XXX/www/myapp/.git/
これでノンベアリポジトリの作成はできました。ただベアリポジトリと繋がっていないので繋げてpullできるようにします。
$ git remote add origin /home/XXX/git/myapp.git
$ git remote -v
origin /home/XXX/git/myapp.git (fetch)
origin /home/XXX/git/myapp.git (push)
これでベアリポジトリからpullして情報を更新することができるようになりました。
ローカルリポジトリを作成する
ローカルはさっき作成したリポジトリをcloneするようにします。ssh接続で鍵使っているからちょっと長いけど、こんな感じでいけます。
$ git -c core.sshCommand="ssh -i /Users/XXX/.ssh/秘密鍵.key" clone ssh://アカウント@サーバー:/home/〇〇/git/myapp.git
Cloning into 'myapp'...
warning: You appear to have cloned an empty repository.
これでさっきさくらのレンタルサーバーで作成したmyappをcloneすることができました。
変更を加えてPushする
cloneできたので、変更を加えてリモートリポジトリにPushしたいと思います。
Pushの設定をする
Pushする際に鍵を指定したいので、sshの設定を追記しておきます。
$ vim ~/.ssh/config
Host XXX.sakura.ne.jp
Hostname XXX.sakura.ne.jp
User git
IdentityFile /Users/XXX/.ssh/sakura-server-key
Hostにはさくらのサーバーを、IdentityFileはSSH接続する際の秘密鍵を指定です。
リモートリポジトリにPushする
これで変更を加えてPushしてみます。
$ cd app
$ vim hello.html
Hello!!
$ git add .
$ git commit -m "first commit"
[master (root-commit) e62dd37] first commit
1 file changed, 1 insertion(+)
create mode 100644 hello.html
$ git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 213 bytes | 213.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To ssh://XXX.sakura.ne.jp:/home/XXX/git/myapp.git
* [new branch] master -> master
ちゃんとPushできましたね。
リモートリポジトリを確認する
Pushしたのでリモートリポジトリを確認してみます。SSH接続してgitディレクトリ配下のmyapp.gitをみてみるとコミットが表示されていますね。
$ cd git/myapp.git
$ git log
commit e62dd377cce90b12435614e47d7552c22ee3124b (HEAD -> master)
Author: Me <XXXXX@gmail.com>
Date: Thu Dec 15 16:10:46 2022 +0900
first commit
ノンベアリポジトリに変更を取り込む
ベアリポジトリの方でコミットはされたけど、ノンベアリポジトリでもそれを取り込みたいのでpullします。
$ cd /home/XXX/www/myapp
# 何も変更がされていないことを確認
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
$ git pull origin master
From /home/XXX/git/myapp
* branch master -> FETCH_HEAD
# 変更が取り込まれて、コミットしたファイルがあるのを確認
$ ls
hello.html
ベアリポジトリからノンベアリポジトリへのpullもできましたね。これで一連の流れは終わり。
Pushしたら自動でベアリポジトリにファイルの変更が反映されるようにする
一応流れとしてはできたけど、Pushしても反映されるのはベアリポジトリだけでノンベアリポジトリには何もPushしたファイルが反映されないのが面倒です。(いちいちPullしないといけません)
なのでPushしたら自動でpullするように設定します。.gitディレクトリ配下にあるhooksに処理を書けば自動でPushした際に実行してくれます。
$ cd /home/XXX/git/myapp.git/hooks
$ vim post-receive
#! /bin/sh
cd /home/XXX/www/myapp
git --git-dir=.git pull origin master
実行権限を付与する。
$ chmod +x post-receive
これでPushされたら自動でpullされるはずです。
- ローカルでファイル変更してPush
- さくらのレンタルサーバのノンベアリポジトリのファイルがPushされた内容に変わっていたらOK
試しにPushしてみると、ノンベアリポジトリも更新されるようになりました。
まとめ
さくらのレンタルサーバでGitリポジトリを作成してPushしてみたけど、一度作って仕舞えば後はGitコマンドで反映できるから楽ですね。
今回やったことは以下です。
- さくらのレンタルサーバーにベアリポジトリを作成する
- さくらのレンタルサーバーにノンベアリポジトリを作成する
- ローカルでリポジトリをCloneする
- git pushしてリモートリポジトリに反映させる。
同じようなことをやりたかったら試してみてください。使ったのはさくらのレンタルサーバ スタンダードです。