ラクスルの利根川です。 ラクスルも最近の多くのテック系企業のようにソースコードの管理に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から追加します。
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 の運用をしています。
現状は少人数のメンバーですが、現在エンジニアは絶賛採用中で、 これから加入するメンバーも含めて、会社のフェーズに適した開発体制を模索していきます。