私はGitHubがクローンにすべてのファイルを保存するのではなく、変更するファイルだけを保存することによって無駄を減らすことを何度も読んだことがあります。 SourceGitHubはストレージの無駄をどのように削減しますか?
Gitでこの機能を見つけることができなかったため、これはどうやってこのタイプの機能を複製できますか?
この機能を持つ他のVCSを使用しても構いません。
私はGitHubがクローンにすべてのファイルを保存するのではなく、変更するファイルだけを保存することによって無駄を減らすことを何度も読んだことがあります。 SourceGitHubはストレージの無駄をどのように削減しますか?
Gitでこの機能を見つけることができなかったため、これはどうやってこのタイプの機能を複製できますか?
この機能を持つ他のVCSを使用しても構いません。
Githubチームがa fairly detailed article about their storage layerを付けました。
興味深いのは、彼らがNIH症候群に悩まされているのではなく、コアgitシステムの既存の機能の上にすべての作業を基づいていることです。
おそらく、GitHubのリポジトリストレージ階層DGitは、同じ技術を使用して構築されていることは驚くべきことです。なぜSANではないのですか?分散ファイルシステム?耐久性のあるビットを保存する問題を抽象化する他の魔法のクラウド技術?
答えは簡単です。速くて堅牢です。
あなたは(コアgitの中)configure a shared object storage location複数のリポジトリで一緒に使用することができます。
だから、戻ってあなたの質問に来ます。
Githubは同じリポジトリのフォークを同じサーバー(または冗長性と可用性のためにサーバーのセット)に配置することでこれを利用します。その結果、重複しているオブジェクト(およびフォーク内に多数存在するオブジェクト)は一度だけ格納する必要があります。
彼らは同じマシン上のフォークを共用し、共有リポジトリストレージバックエンドを使用します。 – Thilo
関連(ただし、ここではそれについてのより良い議論もありましたが、今すぐ見つけることはできません):http://stackoverflow.com/questions/11974686/explanation-of-github-fork-and-how-they-store-files – Thilo
GitHubチームのストレージバックエンドに関するブログ(基本的にGitだけです):http://githubengineering.com/introducing-dgit/ – Thilo