ラクスルの利根川です。
ラクスルも最近の多くのテック系企業のようにソースコードの管理に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をsing upしました。
既に殆どのメンバーがアカウントは持っていたので、アカウントを聞いて、Add memberから追加します。
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