はばばばば

長くなりそうなことや取っておきたいことを記録します

使わなくなってしまったGitHub上のPrivateリポジトリをQNAP上のGitサーバに退避してお金持ちになる

f:id:Mint0A0yama:20150324021941p:plain

プラングレードアップは避けたい…でもローカルLAN上では共有しておきたい…みたいなニッチなニーズにお応えします。

f:id:Mint0A0yama:20150324013723p:plain

QNAPでは独自のパッケージ管理システム(IPKG)によりGitがすんなり入る。GUI(Web管理画面)で入れられるので尚の事楽。

ただし、QNAPでは独自のsshdが起動しているらしく、adminユーザのみのsshアクセスが許されていることや再起動でsshd_configがリセットされてしまうことなど色々不便らしい。 ググって見た限り、gitユーザを使いたいばかりにopensshを入れたりautorunを使ったり公開鍵準備したり色々苦労されているブログを拝見したりした。

が、今回はあくまでも「使わなくなってしまったPrivateリポジトリの退避」が目的なので、管理者レベルの一部のメンバーが触れるくらいしか想定敷いてなかったりする。なのでQNAP独特に嫌な所でハマったりしないよう以下のように割り切った。

  • git操作はadminユーザでsshログインして操作する(とりあえず管理者が操作できれば十分)
  • issueやpullreqは捨てる(そもそも重要なことを書いてないケース)
    • どうしても残したいものがあるなら、とりあえずWebクリップで保存しておく

毎回ログインパスワードを入力したっていいんだ。セキュリティを気にするような用途は避けてセキュリティコストを回避するんだ。大した作業じゃない場合は大仰な準備は必要ないんだ。作業コストはお金で解決すべきだが、作業コストも費用も回避できるならそれではいいのではないですか。

以下、作業記録。

移行作業用の環境(Macなど)にGitHubからcloneしてローカルリポジトリ作成

f:id:Mint0A0yama:20150324015409p:plain

sshでcloneするためのURLをいつものフォームからコピペ。

$ git clone --bare git@github.com:xxx_project/xxx_repo.git xxx_repo
Cloning into bare repository 'xxx_repo'...
remote: Counting objects: 99, done.
remote: Total 99 (delta 0), reused 0 (delta 0), pack-reused 99
Receiving objects: 100% (99/99), 99.99 KiB | 0 bytes/s, done.
Resolving deltas: 100% (99/99), done.
Checking connectivity... done.

QNAP上のGitサーバにリモートリポジトリ作成

もちadminユーザで作業する。

# pwd
/share/git
# mkdir xxx_repo.git
# cd xxx_repo.git/
# git init --bare --shared

移行用の環境からQNAP上のGitサーバにpush

$ git push --mirror admin@192.168.0.99:/share/git/xxx_repo.git
admin@192.168.0.99's password:
Counting objects: 99, done.
Delta compression using up to 9 threads.
Compressing objects: 100% (99/99), done.
Writing objects: 100% (99/99), 99.99 KiB | 0 bytes/s, done.
Total 99 (delta 99), reused 99 (delta 99)
To admin@192.168.0.99:/share/git/xxx_repo.git
* [new branch] master -> master

QNAP上のGitサーバからローカル環境にclone

$ pwd
/Users/user/workspace
$ git clone admin@192.168.0.99:/share/git/xxx_repo.git xxx_repo
Cloning into 'xxx_repo'...
admin@192.168.0.99's password:
remote: Counting objects: 99, done.
remote: Compressing objects: 100% (99/99), done.
remote: Total 99 (delta 34), reused 0 (delta 0)
Receiving objects: 100% (99/99), 99.99 KiB | 0 bytes/s, done.
Resolving deltas: 100% (99/99), done.
Checking connectivity... done.

ここでコミットログを見たりして上手く行ってることを確認してヨシヨシって言う。

移行作業用のローカルリポジトリは削除しとく

$ rm -rf xxx_repo/