2010-07-01 10 views
6

Ich möchte etwas in git, die Mercurial's Bigfiles Extension ähnlich ist (Anmerkung: Ich weiß von git-bigfiles, aber das ist nicht verwandt).Git analog zu Hgs Bigfiles Extension?

Grundsätzlich mag ich große Binärdateien in meinem Git Repository speichern, aber ich will nicht jede Version immer von den großen binären bekommen, wenn ich einen Klon zu tun. Ich möchte nur die großen Binärdateien herunterladen, wenn ich eine bestimmte Revision auschecke, die diese großen Dateien enthält.

Antwort

5

Hier sind ein paar Optionen zu prüfen:

Shallow Klone: ​​Sie können den --depth <depth> Parameter git clone fügen Sie einen flachen Klon des Repository zu bekommen. z.B. Wenn <depth> 1 ist, bedeutet das, dass der Klon nur die Dateien abruft, die für den letzten Commit benötigt werden. Allerdings ist eine solche Repositories umständlich Beschränkungen auf, was man mit ihnen machen kann, wie in der git clone Manpage beschrieben:

 
     --depth 
      Create a shallow clone with a history truncated to the specified 
      number of revisions. A shallow repository has a number of 
      limitations (you cannot clone or fetch from it, nor push from nor 
      into it), but is adequate if you are only interested in the recent 
      history of a large project with a long history, and would want to 
      send in fixes as patches. 

In der Tat, wie in this thread diskutiert, die so etwas wie eine Übertreibung ist - es gibt nützliche Situationen, in denen drängen aus Ein oberflächlicher Klon funktioniert immer noch und es ist möglich, dass er zu Ihrem Workflow passt.

Scott Chacon "git media" Erweiterung: Der Autor beschreibt dies in der Antwort auf this similar question und in der Readme auf GitHub: http://github.com/schacon/git-media.

Flache Submodule: Sie könnten alle Ihre großen Dateien in einem separaten Git-Repository aufbewahren und dieses als shallow submodule Ihrem Haupt-Repository hinzufügen. Dies hätte den Vorteil, dass Sie nicht die Einschränkungen von flachen Klonen für Ihren Code haben, sondern nur das Repository mit den großen Dateien.

Es gibt auch eine Reihe von Möglichkeiten, dies zu tun, indem Sie Hooks (zum Beispiel) rsync über Ihre großen Dateien von Git-Hooks hinzufügen, aber ich nehme an, dass es gute Gründe gibt, dass Sie diese Dateien unter Kontrolle git behalten wollen an erster Stelle.

Ich hoffe, dass eine Hilfe ist.

+0

git-media sieht genau aus, was ich will, aber es ist nicht ganz fertig. Ich denke, ich habe es mit ein wenig Hacking funktioniert. Jetzt muss ich nur die Unterstützung für das Hochladen von Dateien an die Stelle kodieren, an die ich sie möchte. – davr

+0

Für die Zukunft, hier ist meine Gabel von git-Medien mit einigen notwendigen Veränderungen: http://github.com/davr/git-media – davr

+0

Große, die sehr nützlich aussieht! Genau wie ein weiterer Punkt von Interesse, der Thread hier (und insbesondere die Folien in der ersten Mail verlinkt) sind interessant zum Thema git Umgang mit großen Dateien http://git.661346.n2.nabble.com/Git-and -Media-Repositories-td1446700.html –