githubへ100MB超のファイルのあるrepositoryを移行する


ラクスルの利根川です。
ラクスルも最近の多くのテック系企業のようにソースコードの管理にgithubを使っています。

ラクスルがgithubに来るまで

raksul.com をオープンして間もない2011年10月からソースコードの管理をgitにて行っておりましたが、2013年12月に「コードレビューとかプルリク運用とかそろそろしたいよね」とgitlabを使用していました。
ただ、過去の1万以上のcommitのせいか、当社だとgitlabの挙動が正直安定していなかった(が、その修正にpull requestを送る程の余力は無い)のもあり、当社でもgithubにてソースコードを管理することになりました。

githubへ移行する時

1.Sign UPする

githubの価格表に記載がありますが、当社の場合は10 private repositories で足りるので、bronzeをsign upしました。

既に殆どのメンバーがアカウントは持っていたので、アカウントを聞いて、Add memberから追加します。

github_screenshot

2.既存のrepositoryをpushする

過去、100MB以上のbinary データをcommitしてしまっていた為、少々ハマりました。

githubのhelpに記載もありますが、50MB以上で、warning が出て、100MB超えると、error となりpush出来ません。

直近のcommitならgit reset HEAD^ とかして、やり直せばよいのですが、移行の場合は、そうはいきません。

2-1.確認

100MB超のファイルが現在使われていないかを確認する。
(そもそも、gitの管理下に置く必要がないはずですよね。)

2-2.各自の作業内容をpush

後ほどhashが変わってしまうので、
各メンバーに作業内容を git pushしておくよう依頼

2-3.originからclone

origin から–mirror オプション付きで cloneする
git clone –mirror <SOURCE_REPOSITORY_URL>
cd <YOUR-REPOSITORY>

2-4.BFG Repo-Cleanerをダウンロード

BFG Repo-Cleaner というrepositoryを一括できれいにする為のツールがあるので、
http://rtyley.github.io/bfg-repo-cleaner/
の右からjarをダウンロード。

2-5.50M超のファイルを削除

bfg にて50M超のファイルを削除
java -jar bfg-1.11.1.jar –strip-blobs-bigger-than 50M
// バージョンは適宜変えてください。
// javaのインストールが必要です。
これを50M超のファイルが除去され、それ以降の commit のhash が変わります。

commit fe6c89ce43019b730701b7e4c2df2954139ea731
Merge: 36f3a60 320f3a0
Author: Yuta Tonegawa <@raksul.com>
Date:   Sat Jan 11 14:20:24 2014 +0900

Merge branch ‘master’ of localhost:raksul/raksul
Former-commit-id: 7e5bbba37d96ffe2ae51d7490117e10c42940312   ←一番最後に古いhashが入ります。

2-6.reflogからも削除

git push改めてする前に、reflogから削除して、git gcもして、置く必要があります。

git reflog expire –expire=now –all
git gc –prune=now —aggressive

2-7.最後にgit push

これで晴れてgithub に push出来るようになります。

git push –mirror <DESTINATION_REPOSITORY_URL>

現在の運用

ラクスルのチームは 在籍2年以上の全体を把握しているフルタイムメンバー3名、2014年7月 加入のフルタイム1名、長期インターン1名 のチームで
うち3名のフルタイムメンバーがリリースを行っています。

現在は、3名のリリース行うエンジニアは基本的にmaster にpushしそのままリリース。
その他の人はdev/<内容> でbranchを切りpull request の運用をしています。

現状は少人数のメンバーですが、現在エンジニアは絶賛採用中で、
これから加入するメンバーも含めて、会社のフェーズに適した開発体制を模索していきます。

参考

http://qiita.com/tanacasino/items/901723e3463bac38f40e