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.