さくらのレンタルサーバでGitリポジトリを作成してPush/Pullする

さくらのレンタルサーバでGit使いたんだけど使えるの?
使えるよ!

レンタルサーバでGitを使ってファイルをアップロードして更新できたら楽ですよね。この記事ではさくらのレンタルサーバにGitリポジトリを作成してpushするっていうことをやっていきますよ。

記事の内容
  • さくらのレンタルサーバーにベアリポジトリを作成する
  • さくらのレンタルサーバーにノンベアリポジトリを作成する
  • ローカルからPushして反映させる

    さくらのレンタルサーバでGitを使ってコードを管理したい方は見てみてください。

    さくらのレンタルサーバで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されるはずです。

    確認手順
    1. ローカルでファイル変更してPush
    2. さくらのレンタルサーバのノンベアリポジトリのファイルがPushされた内容に変わっていたらOK

    試しにPushしてみると、ノンベアリポジトリも更新されるようになりました。

    まとめ

    さくらのレンタルサーバでGitリポジトリを作成してPushしてみたけど、一度作って仕舞えば後はGitコマンドで反映できるから楽ですね。

    今回やったことは以下です。

    やったこと
    • さくらのレンタルサーバーにベアリポジトリを作成する
    • さくらのレンタルサーバーにノンベアリポジトリを作成する
    • ローカルでリポジトリをCloneする
    • git pushしてリモートリポジトリに反映させる。

    同じようなことをやりたかったら試してみてください。使ったのはさくらのレンタルサーバ スタンダードです。