Ist es möglich, ein bestimmtes Commit in einem Repository flach zu klonen, dh mit Tiefe 1? Etwas wie
git clone http://myrepo.git 728a4d --depth 1
um den Repository-Status zu erhalten, wie er beim Commit mit SHA ist 728a4d...
?
Die Motivation besteht darin, zu vermeiden, dass das gesamte Repository geklont werden muss, und dann dieses bestimmte Commit zu überprüfen, wenn wir nur an dem Status des Repositorys bei diesem bestimmten Commit interessiert sind.
git
shallow-clone
Kinn
quelle
quelle
Antworten:
Ab Git 2.5.0 (das sowohl auf Client- als auch auf Serverseite verfügbar sein muss ) können Sie
uploadpack.allowReachableSHA1InWant=true
auf der Serverseite festlegen, dass bestimmte SHA1s abgerufen werden sollen:Beachten Sie, dass ich keine Syntax gefunden habe, mit der ich dies
git clone
direkt tun kann.quelle
git fetch --depth 1 origin d6be96bc...
Showsfatal: Couldn't find remote ref d6be96bc...
allowTipSHA1InWant
, aber wederallowReachableSHA1InWant
nochallowAnySHA1InWant
.HINWEIS: Mein Beispiel hilft nicht beim Klonen mit einem Commit-Hash, aber es hilft beim Klonen eines Tags und verfügt über ein leichtes Repository.
Wenn Sie nur ein Commit in Ihrem "Klon" haben müssen und Commit-Hash verwenden möchten, lautet die kurze Antwort NEIN .
Ich verwende diese Befehlskonstruktion (getestet in v2.13.2.windows.1 ) für Tags:
Vollständiges Beispiel:
.git
dir Größe ( 267K vs 2.6M bei Verwendung von fullclone
):Ich möchte bezeichnen,
--branch
kann ein Tag / Zweig nehmen.https://git-scm.com/docs/git-clone#git-clone---branchltnamegt
UPD
Kurz gesagt, es kann "refs" dauern. Lesen Sie hier mehr: Was bedeutet die Git-Fehlermeldung "Server erlaubt keine Anforderung für nicht beworbenes Objekt"?
Auch gibt es keine Tricks wie:
Danke @BenjiWiebe, dass du mich auf meinen Fehler hingewiesen hast.
quelle
--branch
unterstützt keine Commits, nur Filialnamen ... das löst es überhaupt nicht. Da ist es nicht wahr.Die sofortige Antwort lautet: Sie können nicht.
Warum? Eine ausführliche Erklärung finden Sie hier: Warum gibt es keine Git Clone-spezifische Commit-Option?
Was kannst du sonst noch tun?
Wie klone ich ein Repository für ein bestimmtes Commit? (vollständiger Klon)
Mehr Info:
Wie klone ich einen einzelnen Zweig?
git clone <url> --branch <branch_name> --single-branch <folder_name>
Wie klone ich nur das letzte Commit eines bestimmten Zweigs?
git clone <url> --depth=1 --branch <branch_name> --single-branch <folder_name>
Wie kann man ein bestimmtes Commit mit Tiefe 1 flach klonen?
Wie @sschuberth auskommentierte:
--depth
impliziert--single-branch
.Verwenden Sie anstelle des Klonens den Befehl fetch:
quelle
--depth
impliziert--single-branch
, so dass Sie es in diesem Fall fallen lassen könnten.git fetch
akzeptieren tatsächlich einen SHA1 fürrefspec
?Versuchen Sie es mit
while
in bash:Dies ist ziemlich langsam, da jedes Commit einzeln abgerufen wird. Sie könnten das Inkrement erhöhen (um Commits in Stapeln abzurufen und die Leistung über ein Netzwerk zu verbessern), aber es ist immer noch ein Brute-Force-Ansatz.
quelle