git はディスクへの負荷が SVN に比べるととても激しい2019年01月09日 13時07分47秒

勤務先で subversion から git に二、三年以上かけて、数百にのぼるライブラリやプログラムの履歴管理を移行した。Subversion が中央集中管理型の履歴管理なのに対し、git は分散型。

業務などの集中管理が必須な環境では、中央管理型の Subversion の方が勝手は良い。git は分散型とは結局、業務として管理体制を整えるのに、履歴管理を管理する管理システムが必要になる。巷では、あれこれと話題になっている github 等がその一例だ。とにかく、subversion の方が、各々まで構成を把握できて優れている。

履歴も Subversion ではレポジトリが一極集中で集めるのに対し、github は全てのコピーが全ての履歴を保持する。また、git では個別管理が基本なので、Subversion では一つのレポジトリに入っていたものを全て分割したので、数百に分かれた。移行時に正しく履歴を移さなかった者達もいたので一部の変更記録は失われた。

移行後に目立つのは、git の遅さ。特に細かいファイルで、大量の差分を管理する設計のため、ディスクへの負荷が激しい。また、ファイルはあちこちで共有されるので NFS 越しが基本で、ネットワークにも負荷がかかっている。一万にも上る差分で構成されているレポジトリが数個、それに小さいレポジトリも一気に git clone をかける。酷いときには、clone に三十分や一時間かかることもある。

git clone --depth 1 などの、shallow clone 等で最新の構成のみを取得する方法もあるが、これでは git log やブランチからの差分情報などが取得できないので、利用不可だった。それに加えて、一部のレポジトリは depth 1 でも二千ぐらいの差分を取得するので、他の情報を失った程の対価はなかった。

それでも git の方が、Jenkins やその他のウェブサービスとの親和性が高いので、総合的には subversion よりも総合的な開発環境の構築と使い勝手で若干勝るところはある。