2009-06-30 3 views
7

Ich mache etwas Arbeit, um einen wahrgenommenen Fehler in einem Git Support-Tool zu finden, und ich möchte ein Repository (möglicherweise viele Male) für experimentelle Zwecke kopieren. Ich möchte, dass feste Links für die ursprüngliche Repository-Objektdatenbank erstellt werden, um nicht Speicherplatz zu verschwenden, der mehrere Kopien identischer Objekte mit identischen SHA-Werten speichert. git clone erreicht dies schön, aber leider scheinen ich kann nicht einen Weg zu finden, git clone geben Sie mir eine neue Kopie des Repository aufgebaut wie das Original-Repository zu machen:Wie kopiere/klone ich ein Git-Repository, ohne Speicherplatz zu verschwenden?

  1. die Klon-Punkte zurück auf die kopierte Repository als seinen Ursprung, aber ich will es den gleichen Ursprung wie das kopierte Repository mit nur einem Zweig
  2. der Klon windet sich haben, aber ich möchte es alle Zweige des kopierten Repository

I haben kann etwas davon verbessern, indem ich git clone --mirror verwende, aber das wird nur funktionieren, um ein blankes Repository zu erstellen, und das Repository, das ich gerade experimentiere on ist nicht frei, und das Support-Tool, das ich versuche zu debuggen funktioniert nicht auf bare Repositories.

Ich dachte daran, eine schnelle Shell-Schleife zu schreiben, um eine neue Objektdatenbank voller Hardlinks zur ursprünglichen Objektdatenbank zu machen und dann alles andere aus dem ursprünglichen .git-Verzeichnis zu kopieren und dann einen Git-Checkout durchzuführen, aber ich bin Ich bin besorgt, dass dies kompliziert genug ist, um fehleranfällig zu sein, und dass ich nicht genug weiß, um diese Art von Low-Level-Operation korrekt durchzuführen und ein Repository mit subtilen Fehlern aufzubauen. Sollte dieser Ansatz theoretisch funktionieren?

Besser noch, gibt es eine Möglichkeit, Optionen zu Git Clone übergeben, damit es tun, was ich will?

Gibt es eine Möglichkeit, ich kann ein neues Repository erstellen, aber sagen, dass seine Objektdatenbank in einem anderen Verzeichnis ist, im Grunde gesagt, die Objektdatenbank aus dem ursprünglichen Repository zu teilen?

Wenn keiner der oben genannten funktioniert, dann bin ich nur mit einem cp -pr, die viel Speicherplatz verbrauchen wird und zeitaufwendig sein wird.

Antwort

5

Ich glaube, Sie suchen

git clone --reference=/path/to/existing/repo url 

In git Kauderwelsch dies die Verwendung von "Stellvertreter" bekannt. Es gibt mögliche Probleme mit dieser Option, wie in der git clone help erwähnt, aber es kann Ihren Zwecken entsprechen.

Sie könnten auch interessiert sein an Dustin Helfer git-alternates.

0

Verwenden Sie "git clone --spiegel", dann ändern Sie es von nackten zu nicht-bare-Repository (repo.git in repo/.git umbenennen, .git/config-Datei kopieren, Arbeitsverzeichnis mit "git checkout HEAD" auschecken). Hinweis: Ich habe nicht überprüft, ob es wie gewünscht funktioniert!

0

Verwenden Sie den Git Clone mit der Option --no-checkout. Aktualisieren Sie das Git-Repository mit git fetch anstelle von git pull, um ein Auschecken zu vermeiden.

Verwandte Themen