3

「GitInternal」という本は、p50でピアツーピアのコンテンツ配信ネットワークとしてgitを使用することについて言及していますが、詳細はあまりありません。特に、さまざまなファイルを追跡する複数のブランチを作成する方法。例:

(作業ディレクトリ)a00.exe a01.exe b00.exe c00.exe c01.exe c02.exe

マスターブランチはすべてのファイルを追跡しますが、ブランチAはa00.exeとa01.exeのみを追跡し、ブランチBはb00.exeなどを追跡します。次のコミットでは、a00.exeb00.exec00.exeが更新されます。このようなブランチを作成するにはどうすればよいですか?すべてのブランチがコミットされたら、リモートから特定のブランチのみをフェッチできますか?ありがとう!

4

2 に答える 2

7

ある種のスクリプトでコンテンツのさまざまなブランチを作成する必要があります。これを行う基本的な方法は、コンテンツをデータベースに追加し(この場合、マスターブランチにコミットするだけで)、一時的なインデックスで、各ブランチに必要なすべてのコンテンツを読み込むことです(git read -tree / git update-index)、そのツリーの書き込み(git write-tree)、コミットオブジェクトの書き込み(git commit-tree)、およびその新しいコミットへのブランチの更新(git update-ref)。これらはすべて、日常業務では通常使用されない配管コマンドですが、ディスク上のディレクトリにすべてのコンテンツを同時に含めることなくスナップショットを作成できます。

このようなことを行うためのスクリプトの例は次のとおりです。

http://github.com/schacon/gitcrazy/blob/master/update_content.rb

ここでは、それぞれが1つ以上の役割(「memcache」、「database」、または「webserver」)を持ついくつかのサーバーを定義します。次に、次のような役割にコンテンツを追加できます。

$ update_content.rb /path/to/content file_name memcache

これにより、コンテンツがgit dbに追加され、影響を受けるサーバー(この場合はmemcacheロールを持つサーバー)のブランチが更新されます。私は任意の役割の複数のファイルに対してそれを行うことができ、gitは各サーバーが持つべきコンテンツを追跡します。次に、各サーバーは特定のブランチ('server / s1'、'server / s2'など)をフェッチできます。

私はこれをすぐに示す簡単なスクリーンキャストを行うことを考えています-サンプルスクリプトが役立つことを願っています。実行して何が起こっているのかを理解するのは非常に簡単なはずです。同じプロジェクトに、どのサーバーブランチにどのコンテンツがあるかを一覧表示する「list」スクリプトがあります。

于 2009-12-07T23:56:35.387 に答える
5

gitinternalsの作者であるscottchaconによるそのトピックについてのビデオ/トークがありました。彼は、ある種のモールでの広告のコンテンツ配信ネットワークについて語っています。刺激的:http ://www.techscreencast.com/language/ruby/using-git-in-ruby-applications --- scott-chacon- / 1431

于 2009-12-07T22:55:07.997 に答える