Github に大規模なプロジェクトのフォークがあり、他の人のフォークから変更をプルし、私の変更をプルできる方法を推奨したいと考えています。
この質問で推奨されているように、コードをプルしたいユーザーのために新しい名前付きリモートを追加することは素晴らしい解決策のように思えますが、そうするとローカルリポジトリのサイズに大きな影響を与えますか?
(とりあえずやってみますが、これといった情報が見つからなかったので、後世にお願いしようと思いました。)
Github に大規模なプロジェクトのフォークがあり、他の人のフォークから変更をプルし、私の変更をプルできる方法を推奨したいと考えています。
この質問で推奨されているように、コードをプルしたいユーザーのために新しい名前付きリモートを追加することは素晴らしい解決策のように思えますが、そうするとローカルリポジトリのサイズに大きな影響を与えますか?
(とりあえずやってみますが、これといった情報が見つからなかったので、後世にお願いしようと思いました。)
(用語に関する注意として、これらは「オリジン」ではなく、他の「リモート」です。「オリジン」は、クローン元のリポジトリ用に設定されたリモートのデフォルト名です。)
元の大きなリポジトリのフォークであるリモートを追加した場合 (およびそこからフェッチする場合)、通常は余分なスペースをほとんど使用しません。これは、git の巧妙なストレージ モデルによるものです。各ファイル (「ブロブ」) はハッシュによって識別され、各ディレクトリ (「ツリー」) はそれに含まれるブロブ、ツリー、およびその他のオブジェクトのハッシュのハッシュによって識別され、コミットはツリーを含むデータのハッシュによって識別されます。ソースコードのトップレベルで。そのため、フォークが存在する時点までのすべての履歴は、同じ ID を持つコミットによって表されるため、それらに使用される追加のストレージはありません。分岐後、変更されたファイルに使用される追加のストレージのみがあります。リポジトリに大きなブロブがある場合、コンテンツが変更されない限り、それらは同じハッシュを保持します。したがって、一度だけ保存されます。(それでも、git はオブジェクトをパックするときにバイナリ デルタ圧縮を行うため、小さな変更を大きなファイルに保存することは依然としてかなり効率的です。)
フォークが元のリポジトリに存在しない大きな新しいファイルを追加した場合、もちろん、使用されるスペースの量が大幅に増加します。