3 Stimmen

Verwendung von Git als Netzwerk zur Verteilung von Inhalten

In dem Buch "Git Internal" wird auf S. 50 die Verwendung von Git als Peer-to-Peer-Netzwerk für die Verteilung von Inhalten erwähnt, aber es wird nicht sehr ausführlich darauf eingegangen. Vor allem, wie man mehrere Zweige hat, in denen verschiedene Dateien verfolgt werden. Beispiel:

(Arbeitsdirektor) a00.exe a01.exe b00.exe c00.exe c01.exe c02.exe

Der Hauptzweig verfolgt alle Dateien, während Zweig A nur a00.exe und a01.exe verfolgt, Zweig B b00.exe und so weiter. Die nächste Übergabe wird a00.exe b00.exe c00.exe aktualisieren. Wie kann ich solche Zweige erstellen? Kann ich, nachdem alle Zweige übertragen wurden, nur bestimmte Zweige aus der Ferne abrufen? Vielen Dank!

7voto

Scott Chacon Punkte 2736

Sie benötigen eine Art Skript, das die verschiedenen Zweige des Inhalts für Sie erstellt. Der grundlegende Weg, dies zu tun, besteht darin, die Inhalte zur Datenbank hinzuzufügen (in Ihrem Fall, indem Sie sie einfach in den Master-Zweig übertragen), dann in einem temporären Index alle Inhalte einzulesen, die Sie in jedem Zweig haben wollen (git read-tree/git update-index), diesen Baum herauszuschreiben (git write-tree), ein Commit-Objekt zu schreiben (git commit-tree) und den Zweig auf diesen neuen Commit zu aktualisieren (git update-ref). Dies sind alles Klempnerbefehle, die normalerweise im täglichen Betrieb nicht verwendet werden, die es aber ermöglichen, Schnappschüsse zu erstellen, ohne den gesamten Inhalt eines Verzeichnisses gleichzeitig auf der Festplatte zu haben.

Ein Beispielskript für eine derartige Vorgehensweise finden Sie hier:

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

Hier definiere ich eine Reihe von Servern, die jeweils eine oder mehrere Rollen haben ("Memcache", "Datenbank" oder "Webserver"). Dann kann ich den Inhalt einer Rolle wie folgt hinzufügen:

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

Dadurch wird der Inhalt zu meiner Git-Datenbank hinzugefügt und die Zweige der betroffenen Server (die in diesem Fall die Memcache-Rolle haben) werden aktualisiert. Ich kann dies für mehrere Dateien für jede der Rollen tun, und Git behält den Überblick darüber, welchen Inhalt jeder Server haben sollte. Dann kann jeder Server seinen eigenen Zweig abrufen ('server/s1', 'server/s2', usw.).

Ich werde demnächst einen kurzen Screencast erstellen, der dies demonstriert - ich hoffe, das Beispielskript ist hilfreich. Es sollte ziemlich einfach auszuführen sein, um herauszufinden, was vor sich geht. In demselben Projekt gibt es ein "List"-Skript, das auflistet, welche Inhalte sich auf welchem Serverzweig befinden.

5voto

miku Punkte 170688

Es gab ein Video/Vortrag über dieses Thema vom Git Internals Autor Scott Chacon, er spricht über ein Content Distribution Network für Werbung in einer Art Einkaufszentrum. inspirierend: http://www.techscreencast.com/language/ruby/using-git-in-ruby-applications---scott-chacon-/1431

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X