GitHubリポジトリをローカルGitサーバーに移行する方法


etckeeperで設定ファイルをGit管理していましたが、Privateなリポジトリにしたとしても大事な内容が書かれているファイルをクラウド上に置くことに抵抗を感じて、ローカルのGitサーバーに移行しようと思いました

前提

ローカルのGitサーバーは設置済でSSH経由でアクセスできるようにしてあることとします

作業内容

以下のURLにある通り、既存リポジトリの .git 以下のファイルをローカルGitサーバーのディレクトリに配置するだけで良いそうです

そうすると、Git ディレクトリのデータを my_project.git ディレクトリにコピーできます。

これは、おおざっぱに言うと次の操作と同じようなことです。

$ cp -Rf my_project/.git my_project.git
設定ファイルにはちょっとした違いもありますが、ほぼこんなものです。 作業ディレクトリなしで Git リポジトリを受け取り、それ単体のディレクトリを作成しました。

1. 既存リポジトリの取得

普通にGitHubからcloneすればいいです。普段使っている一般ユーザーのターミナルで git clone を実行します。 usernamemy_project は適宜読み替えてください

$ git colne [email protected]:username/my_project.git

clone したコードの .git ディレクトリに入り、中身を圧縮ファイルでまとめます

$ cd my_project/.git
$ tar zcvf ../my_project.tgz .

2. Gitディレクトリの作成

ローカルGitサーバーにGitリポジトリのディレクトリを作成します。ここでは、 /opt/git 配下にGitリポジトリを作っているものとします。場所は適宜読み替えてください

$ sudo mkdir /opt/git/my_project.git

既存リポジトリの圧縮ファイルを展開します。1. の手順で作成した圧縮ファイルのある場所 (my_project のディレクトリ) へ移動します。 ../ は 1.の手順の状態で my_project/.git にいることを想定しています

$ cd ../
$ sudo tar zxvf my_project.tgz -C /opt/git/my_project.git

Gitリポジトリのオーナーを git ユーザーに変更します

$ sudo chown -R git.git /opt/git/my_project.git

オーナーが変わったことは ls コマンドで確認できます

$ ls -lR /opt/git/my_project.git

3. リポジトリのconfigファイルの変更

.git/config に今までのリポジトリの情報が入っているので、一旦消して、以下の内容だけにします

[core]
        repositoryformatversion = 0
        filemode = true
        bare = true

4. 確認

ローカルGitサーバーのリポジトリが clone 出来ることを確認できれば移行完了です。ローカルサーバーのIPアドレス 192.168.10.1 は適宜読み替えてください

$ git clone [email protected]:/opt/git/my_project.git

確認できれば、今まで使っていたGitHub上のリポジトリは削除しても大丈夫です