Ich versuche herauszufinden, wie ich ein bestimmtes Tag eines Git-Repositorys herunterladen kann - es ist eine Version hinter der aktuellen Version.
Ich habe gesehen, dass es auf der Git-Webseite ein Tag für die vorherige Version mit dem Objektnamen einer langen Hex-Nummer gibt.
Der Versionsname lautet jedoch Tagged release 1.1.5
laut Site " ".
Ich habe einen Befehl wie diesen versucht (mit geänderten Namen):
git clone http://git.abc.net/git/abc.git my_abc
Und ich habe etwas bekommen - ein Verzeichnis, eine Reihe von Unterverzeichnissen usw.
Wie komme ich zu der gesuchten Version, wenn es sich um das gesamte Repository handelt? Wenn nicht, wie lade ich diese bestimmte Version herunter?
clone -b "Tagged release 1.1.5" http://git.abc.net/git/abs.git my_abc
. Dies funktioniert natürlich nur, wenn Sie keinen Zweig mit demselben Namen haben (abhängig von Ihrer Methodik kann dies niemals passieren).git checkout -b new-branch tag-name
. Klonen Sie jetzt Ihren neuen Zweig. Wann immer wir wollen, können wir den neuen Zweig löschen.Antworten:
gibt Ihnen das gesamte Repository.
Nach dem Klonen können Sie die Tags auflisten
$ git tag -l
und dann ein bestimmtes Tag auschecken:Noch besser, checken Sie aus und erstellen Sie einen Zweig (andernfalls befinden Sie sich in einem Zweig, der nach der Revisionsnummer des Tags benannt ist):
quelle
-b
git checkout <tag_name> -b <branch_name>
1.8.3.5
und neueren Versionen--branch <tag ref>
sollte es Ihnen möglich sein, das Repository ab Ihrem<tag ref>
als Repo-HEAD herunterzuladen . kombiniert mit--depth 1
wird eine flache Tag-Kasse durchgeführt. Siehe stackoverflow.com/a/21699307/1695680Klont das Repo und lässt Sie auf dem Tag, an dem Sie interessiert sind.
Dokumentation für 1.8.0 der Git-Klonzustände .
quelle
--depth 1
, um das Herunterladen nicht aktueller Commits zu vermeiden.git clone --branch my_abc http://git.abc.net/git/abc.git -b quality
Qualität ist der Name der Branche, die wir übrigens wollen.Zum Auschecken nur eines bestimmten Tags für die Bereitstellung verwende ich z.
Dies scheint der schnellste Weg zu sein, um Code aus einem Remote-Repository auszuchecken, wenn man sich nur für den neuesten Code anstatt für ein vollständiges Repository interessiert. Auf diese Weise ähnelt es dem Befehl 'svn co'.
Hinweis: Gemäß dem Git-Handbuch bedeutet das Übergeben des
--depth
Flags--single-branch
standardmäßig.quelle
--depth n
impliziert--single-branch
. Du brauchst nicht beides.Ich bin kein Git-Experte, aber ich denke, das sollte funktionieren:
ODER
Die zweite Variante erstellt einen neuen Zweig basierend auf dem Tag, mit dem Sie einen "abgetrennten KOPF" vermeiden können. (Git-Checkout-Handbuch)
Jedes Git-Repo enthält den gesamten Revisionsverlauf. Wenn Sie also das Repo klonen, erhalten Sie Zugriff auf das neueste Commit sowie auf alle vorherigen Vorgänge, einschließlich des gesuchten Tags.
quelle
git checkout -b b1.5.0 v1.5.0
beim Auschecken einer Version in einem 'gh-pages'-Zweig verwenden, um erfolgreich auf Github Pages zu pushen. Dieses Gist, das ich geschrieben habe, könnte anderen helfen: branch / tag / submodules ... gist.github.com/1064750cd
inabc/
zuerst , bevor Sie eine Filiale Prüfung könnencd
.Sie können das Git-Archiv verwenden, um einen Teerball für ein bestimmtes Tag oder eine bestimmte Commit-ID herunterzuladen:
Sie können auch ein Zip-Archiv eines Tags exportieren.
Listen-Tags:
Exportieren Sie ein Tag:
Anmerkungen:
quelle
git archive
ich nach einem Passwort gefragt werde, wenn ich nur von einem öffentlichen Repo herunterladen möchte. Wie kann ich dafür sorgen, dass http anstelle von ssh verwendet wird?fatal: Operation not supported by protocol.
undUnexpected end of command stream
Fehlern fehl . Alternativ kann derfatal: The remote end hung up unexpectedly
Fehler auch zurückgegeben werden.Verwenden Sie den
--single-branch
Schalter (verfügbar ab Git 1.7.10) . Die Syntax lautet:Zum Beispiel:
Der Vorteil: Git empfängt Objekte und (muss) Deltas nur für den angegebenen Zweig / Tag auflösen - während genau die gleiche Anzahl von Dateien ausgecheckt wird! Je nach Quell-Repository sparen Sie dadurch viel Speicherplatz. (Außerdem wird es viel schneller gehen.)
quelle
Rufen Sie zuerst alle Tags in dieser bestimmten Fernbedienung ab
oder einfach eingeben
Überprüfen Sie dann die verfügbaren Tags
Wechseln Sie dann mit dem folgenden Befehl zu diesem bestimmten Tag
Hoffe das wird dir helfen!
quelle
git tag
fügt ein Tag hinzu, währendgit tag -l
die verfügbaren TagsWenn Ihre Tags mit dem Linux-
sort
Befehl sortiert werden können , verwenden Sie Folgendes :z.B. if gibt
git tag
zurück:git tag | sort -n | tail -1
wird ausgegeben:git tag | sort -n | tail -2 | head -1
wird ausgegeben:(weil Sie nach dem zweitletzten Tag gefragt haben)
Um das Tag auszuchecken, klonen Sie zuerst das Repo und geben Sie dann Folgendes ein:
..oder was auch immer Sie brauchen.
quelle
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags
git checkout `git tag | sort -n | tail -1`
sort -V
statt verwendensort -n
. Ersteres behandelt Versionen, die nicht unbedingt numerisch sind, z. B. "1.2.3", korrekt. Es versteht sich auch, dass "0.4.10" nach "0.4.1" und nicht nach "0.4.2" geht, was-n
Ihnen geben wird.Ich habe die Dokumentation zum Auschecken von Git überprüft und dabei eine interessante Sache entdeckt:
Wir können also den Tag-Namen (da Tag nichts anderes als ein Name eines Commits ist) wie folgt erwähnen:
PS: In Git können Sie ein Tag nicht direkt aktualisieren (da das Tag nur eine Bezeichnung für ein Commit ist). Sie müssen dasselbe Tag wie ein Zweig auschecken, es dann festschreiben und dann ein separates Tag erstellen.
quelle
===================================
Ich habe das gerade gemacht. Zuerst stellte ich sicher, dass ich die Schreibweise des Tag-Namens kannte.
Dies gab mir eine Liste von Tags auf meinem Git-Server zur Auswahl. Das Originalplakat kannte bereits den Namen seines Tags, sodass dieser Schritt nicht für alle erforderlich ist. Die Ausgabe sah so aus, obwohl die reale Liste länger war.
Ich wählte das Tag, das ich wollte, und holte es und nichts weiter wie folgt.
Ich habe dies dann auf meinem lokalen Computer markiert und meinem Tag den gleichen Namen gegeben.
Ich wollte das Remote-Repository nicht klonen, wie andere vorgeschlagen haben, da das Projekt, an dem ich arbeite, groß ist und ich es in einer schönen, sauberen Umgebung entwickeln möchte. Ich bin der Meinung, dass dies näher an den ursprünglichen Fragen "Ich versuche herauszufinden, wie man einen bestimmten Tag herunterlädt" liegt als an der Lösung, die das Klonen des gesamten Repositorys vorschlägt. Ich verstehe nicht, warum jemand eine Kopie des Windows NT- und Windows 8.1-Quellcodes benötigen sollte, wenn er sich beispielsweise den DOS 0.1-Quellcode ansehen möchte.
Ich wollte CHECKOUT auch nicht verwenden, wie andere vorgeschlagen haben. Ich hatte eine Filiale ausgecheckt und wollte das nicht beeinflussen. Meine Absicht war es, die Software zu holen, die ich wollte, damit ich etwas auswählen und das zu meiner Entwicklung hinzufügen konnte.
Es gibt wahrscheinlich eine Möglichkeit, das Tag selbst abzurufen, anstatt nur eine Kopie des Commits, das markiert wurde. Ich musste das abgerufene Commit selbst markieren. EDIT: Ah ja, ich habe es jetzt gefunden.
Wo Sie den Doppelpunkt sehen, ist das Remote-Name: lokaler Name und hier sind sie die Tag-Namen. Dies läuft, ohne den Arbeitsbaum usw. zu stören. Es scheint nur Dinge von der Fernbedienung auf den lokalen Computer zu kopieren, sodass Sie Ihre eigene Kopie haben.
Mit der hinzugefügten Option --dry-run können Sie sehen, was der Befehl tun würde, wenn Sie überprüfen möchten, was Sie möchten. Also ich denke ein einfaches
ist die wahre Antwort.
=
Ein separater Hinweis zu Tags ... Wenn ich etwas Neues starte, tagge ich normalerweise das leere Repository nach git init, da
erfordert ein Commit, und es stellt sich die Frage: "Wie können Sie Änderungen, die Ihre erste Softwareänderung beinhalten, neu begründen?" Wenn ich anfange zu arbeiten, tue ich das
dh erstelle ein Commit vor meiner ersten echten Änderung und verwende es später
wenn ich meine gesamte Arbeit, einschließlich der ersten Änderung , neu definieren möchte .
quelle
Ausgehend von Peter Johnsons Antwort habe ich mir einen netten kleinen Alias erstellt:
aka 'Git Checkout neuesten Tag'.
Dies beruht auf der GNU-Version von sort, die Situationen wie die von lOranger angemessen behandelt:
Wenn Sie einen Mac verwenden
brew install coreutils
und stattdessen gsort aufrufen.quelle
Versuchen:
quelle
Tags auschecken
Wenn Sie die Versionen von Dateien anzeigen möchten, auf die ein Tag verweist, können Sie eine Git-Prüfung durchführen. Dadurch wird Ihr Repository jedoch in den Status "Separated HEAD" versetzt, was einige schwerwiegende Nebenwirkungen hat:
Wenn Sie im Status "Getrennter KOPF" Änderungen vornehmen und dann ein Commit erstellen, bleibt das Tag gleich, aber Ihr neues Commit gehört keinem Zweig an und ist nicht erreichbar, außer durch den genauen Commit-Hash. Wenn Sie also Änderungen vornehmen müssen, z. B. wenn Sie beispielsweise einen Fehler in einer älteren Version beheben, möchten Sie im Allgemeinen einen Zweig erstellen:
Wenn Sie dies tun und ein Commit durchführen, unterscheidet sich Ihr Zweig der Version 2 geringfügig von Ihrem v2.0.0-Tag, da Ihre neuen Änderungen fortgesetzt werden. Seien Sie also vorsichtig.
quelle
Ich mache das über die Github-API:
quelle