リモートリポジトリをGithubからXserverへ移転させる

Githubの実情

Githubには、パブリックリポジトリとプライベートリポジトリがあって、Freeプランの場合、プライベートリポジトリのは容量的な制限があったが、最近仕様変更がありFreeプランでも容量無制限になったらしい。実行時間には制限があるが個人的な用途では実用上問題ないと思う。

ただ、現状のルールが未来永劫保証されることはなく、再び制限が厳しくなる可能性も考えられるので、プライベートリポジトリをレンタルサーバーのxserverへ引っ越すことにした。

SSH設定

この記事はすでにSSH接続出来ているとして進めていきますが、まだの場合は下記記事を参考にしてください。

ログインを簡略化するために ~/.ssh/config を作ります。 以下、私の場合の事例で説明していきますが、minorugh というところはサーバーIDになりますので、試される場合はご自分のサーバーIDに書き換えてください。

# ~/.ssh/config
Host xsrv #任意のコマンド名
  HostName minorugh.xsrv.jp
  Port 10022
  User minorugh # サーバーID
  IdentityFile ~/.ssh/id_rsa # 秘密鍵のファイル名
  ServerAliveInterval 60 # sshの自動切断を防ぐために記述

私の場合は、上記のとおりHost名をxsrv に設定して、ターミナルから xsrv と入力するだけで接続できるようにしています。

$ xsrv
Last login: Fri Oct 21 22:40:12 2022 from p4490015-ipoe.ipoe.ocn.ne.jp
[minorugh@sv13268 ~]$ 

xserver側の準備

xserverをリモートリポジトリとして使うための準備をします。

SSHでログインした場合 /home/サーバーID/ がユーザーデレクトリ~/となります。 公開デレクトリの場合は、~/ドメイン名/public_htmlとなります。

フルパスで書くと /home/サーバーID/ドメイン名/public_html ということですね。

さて、gitリポジトリは、Webからアクセスできない場所に設置するので、ログインして ~/gitという親デレクトリを作成し、そこへhoge.gitリポジトリを作成します。

$ xsrv
[minorugh@sv13268 ~]$ cd git
[minorugh@sv13268 git]$ mkdir hoge.git
[minorugh@sv13268 git]$ cd hoge.git
[minorugh@sv13268 hoge.git]$ git init --bare

これで、xsrv:/home/minorugh/git/hoge.git という空のリモートリポジトリが作成されます。

ローカル側の準備

参考にした多くのTipsでは、概ね下記手順の紹介が多かったが私の場合は上手く行きませんでした。

$ git clone -mirror <移行元リポジトリのurl>
$ cd <ミラーでできた.gitフォルダ>
$ git push -mirror <移行先リポジトリのurl>

※私の場合の手順

移行前のローカルリポジトリのフォルダーは、保険をかける意味でリネームして保存しておき、同じ場所に新たにGithubからcloneします。

$ mv hoge/ hoge.bak/ # 移行前のローカルリポジトリのフォルダーをリネームして置きます。
$ git clone git@github.com:<Github ID>/hoge.git # 移行元リポジトリのurl

cloneしたフォルダーへ移動してリモートリポジトリurlをxseverに予め作っておいたリモートリポジトリに変更します。

$ cd hoge # clone したフォルダ
$ git remote set-url origin xsrv:/home/minorugh/git/hoge.git # 移行先リポジトリのurl 

.git/config ファイルをエディタで開いて [remote “origin”] のurl が移行先のurlに変わっているのを確認します。 ま、直接エディタで書き換えても同じだと思いますが…

新しいローカルリポジトリから移行先(xserver)のリモートリポジトリへ pushします。

$ cd <新しいローカルリポジトリフォルダー>
$ git push origin <新しいリモートリポジトリのurl>

pushが成功してワークツリーも継承されていることが確認されたら、リネームしてバックアップしてあった古いローカルリポジトリフォルダーは不要なので削除します。github側も必要なければ削除します。

リモートリポジトリをxserverからGithubに戻す

何らかの事情でもう一度Githubに戻したい…というときも、全く同じ手順を踏んで戻すことができます。