Ist es möglich, nur einen Zweig (oder einen bestimmten Commit) in Git und Mercurial zu klonen? Ich meine, ich möchte ein zentrales Repo klonen, aber da es riesig ist, möchte ich nur einen Teil davon bekommen und trotzdem in der Lage sein, meine Änderungen zurückzugeben. Ist es möglich? Ich möchte nur ab Tag 130 oder so?
Wenn das so ist, wie?
Antworten:
In Git Land sprechen Sie über drei verschiedene Arten von Teilklonen:
flache Klone: Ich möchte die Geschichte ab Revisionspunkt X.
Verwenden Sie dies
git clone --depth <n> <url>
, aber bitte denken Sie daran, dass flache Klone bei der Interaktion mit anderen Repositorys etwas eingeschränkt sind. Sie können Patches generieren und per E-Mail senden.Teilklon nach Dateipfad: Ich möchte den gesamten Revisionsverlauf in einem Verzeichnis haben
/path
.In Git nicht möglich . Mit modernem Git können Sie zwar nur spärlich auschecken , dh Sie haben den gesamten Verlauf, aber Sie checken (nur im Arbeitsbereich) nur eine Teilmenge aller Dateien aus.
Nur ausgewählten Zweig klonen : Ich möchte nur einen Zweig (oder eine ausgewählte Teilmenge von Zweigen) klonen.
Möglich und
vor git 1.7.10 nicht einfach: Sie müssten tun , was Klon manuell tut, das heißt
git init [<directory>]
, danngit remote add origin <url>
, bearbeiten.git/config
ersetzen*
inremote.origin.fetch
(wahrscheinlich ‚Master‘) von angeforderten Zweig, danngit fetch
.Ab Git 1.7.10
git clone
gibt es die--single-branch
Option, die anscheinend nur für diesen Zweck hinzugefügt wurde und ziemlich einfach zu sein scheint.Beachten Sie jedoch, dass der Gewinn durch das Klonen nur einer Teilmenge von Zweigen möglicherweise geringer ist, als Sie denken, da Zweige normalerweise den größten Teil ihres Verlaufs gemeinsam haben.
Sie können auch einen flachen Klon nur einer ausgewählten Teilmenge von Zweigen erstellen.
Wenn Sie wissen, wie Benutzer die Dinge nach Dateipfad aufteilen möchten (mehrere Projekte im selben Repository), können Sie das Repo mithilfe von Submodulen (ähnlich wie svn: externals) in separat klonbare Teile aufteilen.
quelle
Im Quecksilberland sprechen Sie von drei verschiedenen Arten von Teilklonen:
hg help sparse
).Wenn Sie wissen, wie die Leute die Dinge nach Dateipfad aufteilen möchten (mehrere Projekte im selben Repo (Schande über Sie)), können Sie Unterrepositorys (ähnlich wie svn externals) verwenden, um das Repo in separat klonbare Teile aufzuteilen
Auch in Bezug auf das "so groß, dass ich nur einen Teil davon bekommen möchte": Das muss man wirklich nur einmal tun. Klonen Sie es einfach, während Sie zu Mittag essen, und dann haben Sie es für immer mehr. Anschließend können
pull
Sie Deltas effizient in Zukunft erhalten. Und wenn Sie einen weiteren Klon davon möchten, klonen Sie einfach Ihren ersten Klon. Wo Sie einen Klon haben, spielt keine Rolle (und lokale Klone belegen keinen zusätzlichen Speicherplatz, da es sich um feste Links unter der Decke handelt).quelle
sparse.py
Mercurial-Erweiterung von Facebook möglich - bitbucket.org/facebook/hg-experimental .Die ausgewählte Antwort bietet einen guten Überblick, es fehlt jedoch ein vollständiges Beispiel.
Minimieren Sie Ihren Download- und Checkout-Footprint (a) , (b) :
Optimieren Sie regelmäßig Ihren lokalen Repository-Footprint (c) (optional, mit Vorsicht verwenden):
Siehe auch: Umgang mit großen Repositorys mit git
quelle
Diese Methode erstellt ein nicht versioniertes Archiv ohne Unterrepositorys:
Der nicht versionierte Quellcode ohne die Subrepositoies befindet sich im Verzeichnis project-no-subrepos
quelle
In Bezug auf Git könnte es von historischer Bedeutung sein, dass Linus Torvalds diese Frage 2007 aus konzeptioneller Sicht in einem Vortrag beantwortete, der aufgezeichnet wurde und online verfügbar ist.
Die Frage ist, ob es möglich ist, nur einige Dateien aus einem Git-Repository auszuchecken.
Tech Talk: Linus Torvalds über Git t = 43: 10
Zusammenfassend sagte er, dass eine der Entwurfsentscheidungen von Git, die es von anderen Quellverwaltungssystemen unterscheidet (er zitiert BitKeeper und SVN), darin besteht, dass Git Inhalte und keine Dateien verwaltet. Die Implikationen sind, dass z. B. ein Diff einer Teilmenge von Dateien in zwei Revisionen berechnet wird, indem zuerst das gesamte Diff genommen und dann nur auf die angeforderten Dateien beschnitten wird. Ein weiterer Grund ist, dass Sie die gesamte Geschichte überprüfen müssen. alles oder nichts. Aus diesem Grund schlägt er vor, lose verwandte Komponenten auf mehrere Repositorys aufzuteilen, und erwähnt die laufenden Bemühungen, eine Benutzeroberfläche für die Verwaltung eines Repositorys zu implementieren, das als Superprojekt mit kleineren Repositorys strukturiert ist.
Soweit ich weiß, ist diese grundlegende Designentscheidung auch heute noch gültig. Das Superprojekt-Ding wurde wahrscheinlich zu dem, was jetzt Submodule sind .
quelle
In mercurial sollten Sie in der Lage sein, einige davon zu verwenden, indem Sie:
Vielleicht möchten Sie auch:
Die Quelle kann Git, Quecksilber oder eine Vielzahl anderer Systeme sein.
Ich habe es nicht ausprobiert, aber konvertieren ist ziemlich reich.
quelle