ファイルの複製を行わずに効率的なバージョン管理を構築する

バージョンの作成やフォークのたびにファイルの完全なコピーを保存すると、容量を浪費してしまいます。10個のファイルがあるプロジェクトで1行だけ変更した場合、10個すべてのファイルを再度保存する必要はありません。

私はLaTeX Writerプロジェクトを構築している際に、この問題に直面しました。高いストレージコストをかけずに、バージョン管理とプロジェクトのフォークを処理する方法が必要でした。

そこで、GitHubの仕組みを調査しました。GitHubは、変更を加えるたびにリポジトリ全体を保存するわけではありません。コンテンツを個別に保存し、参照(リファレンス)を使用してファイルとコミットを紐付けています。

私は主に3つのコンポーネントを使用してシステムを構築しました。

このシステムはコンテンツハッシュによって動作します。ファイルを保存すると、システムはコンテンツに基づいて一意のIDを生成します。もしそのコンテンツが既に存在する場合、システムは既存のBlobを再利用します。新しいBlobは作成しません。

このアプローチにより、フォークが簡単かつ低コストになります。プロジェクトをフォークする場合:

フォークの際、実際のファイルコンテンツはコピーされません。小さなメタデータレコードを複製するだけです。

フォークした内容を編集する場合も、プロセスは効率的なままです。

この手法にはいくつかの利点があります。

重いストレージのオーバーヘッドなしに、GitHubのような機能を実現できます。

出典: https://dev.to/prashant_patil_49/building-github-inspired-version-control-and-forking-without-duplicating-project-files-5aap