Vraag Download een specifieke tag met Git


Ik probeer erachter te komen hoe ik een bepaalde tag van een Git-repository kan downloaden - het is één versie achter de huidige versie.

Ik zag dat er een tag was voor de vorige versie op de git-webpagina, met de objectnaam van iets lang hex-nummer.

Maar de versienaam is "Tagged release 1.1.5"volgens de site.

Ik heb een opdracht als deze geprobeerd (met namen gewijzigd):

git clone http://git.abc.net/git/abc.git my_abc

En ik kreeg iets - een map, een hoop subdirectories, etc.

Als het de volledige repository is, hoe kom ik dan bij de versie die ik zoek? Zo nee, hoe download ik die specifieke versie?


1657
2018-04-27 01:15


oorsprong


antwoorden:


$ git clone

zal je de hele repository geven.

Na de kloon kunt u de tags vermelden $ git tag -l en dan een specifieke tag afrekenen:

$ git checkout tags/<tag_name>

Beter nog, checkout en maak een filiaal (anders zit je op een tak die genoemd is naar het herzieningsnummer van de tag):

$ git checkout tags/<tag_name> -b <branch_name>

2555
2018-04-27 01:53



git clone --branch my_abc http://git.abc.net/git/abc.git

Klopt de repo en laat je achter op de tag waarin je bent geïnteresseerd.

Documentatie voor 1.8.0 van git clone staten.

- vertakking kan ook tags nemen en de HEAD losmaken bij die commit in de resulterende repository.


267
2018-06-14 09:33



Ik ben geen git-expert, maar ik denk dat dit zou moeten werken:

git clone http://git.abc.net/git/abc.git
cd abc
git checkout my_abc 

OF

git clone http://git.abc.net/git/abc.git
cd abc
git checkout -b new_branch my_abc

De tweede variant brengt een nieuw vertakkingspunt tot stand op basis van de tag, waarmee je een 'losse HEAD' kunt vermijden. (git-checkout handleiding)

Elke git-repo bevat de volledige revisiegeschiedenis, dus het klonen van de repo geeft je toegang tot de laatste commit, plus alles wat eerder is ingevoerd, inclusief de tag die je zoekt.


94
2018-04-27 01:54



Voor het uitchecken van slechts een bepaald label voor inzet, gebruik ik bijvoorbeeld:

git clone -b 'v2.0' --single-branch --depth 1 https://github.com/git/git.git

Dit lijkt de snelste manier om code uit een externe repository te bekijken als je alleen interesse hebt in de meest recente code in plaats van in een complete repository. Op deze manier lijkt het op het commando 'svn co'.


85
2017-07-28 02:35



Je kunt git archive gebruiken om een ​​tarball te downloaden voor een bepaalde tag of commit id:

git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar

U kunt ook een zip-archief van een tag exporteren.

  1. Lijst tags:

    git tag
    
    0.0.1
    0.1.0
    
  2. Een tag exporteren:

    git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0
    
  3. Opmerkingen:

    • U hoeft het formaat niet op te geven. Het wordt opgepikt door de naam van het uitvoerbestand.
    • Als u het voorvoegsel opgeeft, wordt uw code geëxporteerd naar een map (als u een slash insluit).

71
2017-12-09 21:46



Gebruik de --single-branch schakelaar  (beschikbaar vanaf Git 1.7.10). De syntaxis is:

git clone -b <tag_name> --single-branch <repo_url> [<dest_dir>] 

Bijvoorbeeld:

git clone -b 'v1.9.5' --single-branch https://github.com/git/git.git git-1.9.5

Het voordeel: Git ontvangt alleen objecten en (moet) delta's oplossen voor de opgegeven branch / tag - terwijl het exact dezelfde aantal bestanden wordt gecontroleerd! Afhankelijk van de bronrepository bespaart dit u veel schijfruimte. (Plus, het zal veel sneller zijn.)


40
2018-06-25 06:28



haal eerst alle tags op die specifieke afstandsbediening

git fetch <remote> 'refs/tags/*:refs/tags/*'

of gewoon typen

git fetch <remote>

Controleer vervolgens de beschikbare tags

git tag -l

schakel vervolgens naar dat specifieke label met behulp van onderstaande opdracht

git checkout tags/<tag_name>

Ik hoop dat dit je zal helpen!


21
2017-09-10 18:57



Ik controleerde het git checkout documentatie, het onthulde een interessant ding:

git checkout -b <nieuwe_branchnaam> <startpunt>   , waarbij het <startpunt> de naam is van een commit   om de nieuwe tak te starten;   Standaard ingesteld op HEAD

Dus we kunnen de tag-naam vermelden (zoals tag niets anders is dan een naam van een commit) zoals, zeg:

>> git checkout -b 1.0.2_branch 1.0.2
pas later enkele bestanden aan 
  >> git push --tags

P.S: In Git kun je een tag niet direct bijwerken (aangezien tag slechts een label voor een commit is), moet je dezelfde tag als een branch uitchecken en je er vervolgens toe verbinden en vervolgens een aparte tag maken.


14
2018-04-26 14:39



Als je tags sorteerbaar zijn met de linux sort commando, gebruik dit:

git tag | sort -n | tail -1

bv. als git tag komt terug:

v1.0.1
v1.0.2
v1.0.5
v1.0.4

git tag | sort -n | tail -1 zal uitvoeren:

v1.0.5

git tag | sort -n | tail -2 | head -1 zal uitvoeren:

v1.0.4

(omdat je hebt gevraagd om de tweede meest recente tag)

om de tag uit te checken, kloneer eerst de repo en typ vervolgens:

git checkout v1.0.4

.. of welke tag je ook nodig hebt.


14
2018-05-12 12:23



git fetch <gitserver> <remotetag>:<localtag>

===================================

Ik heb dit net gedaan. Eerst zorgde ik ervoor dat ik de spelling van de tagnaam kende.

git ls-remote --tags gitserver; : or origin, whatever your remote is called

Dit gaf me een lijst met tags op mijn git-server om uit te kiezen. De oorspronkelijke poster kende de naam van zijn tag al, dus deze stap is niet voor iedereen nodig. De uitvoer zag er als volgt uit, hoewel de echte lijst langer was.

8acb6864d10caa9baf25cc1e4857371efb01f7cd    refs/tags/v5.2.2.2
f4ba9d79e3d760f1990c2117187b5010e92e1ea2    refs/tags/v5.2.3.1
8dd05466201b51fcaf4ca85897347d82fcb29518    refs/tags/Fix_109
9b5087090d9077c10ba22d99d5ce90d8a45c50a3    refs/tags/Fix_110

Ik koos de tag die ik wilde en haalde dat en niets meer als volgt.

git fetch gitserver Fix_110

Ik heb dit vervolgens gelabeld op mijn lokale computer, waardoor mijn tag dezelfde naam kreeg.

git tag Fix_110 FETCH_HEAD

Ik wilde de remote repository niet klonen zoals andere mensen hebben voorgesteld, omdat het project waaraan ik werk groot is en ik wil ontwikkelen in een mooie schone omgeving. Ik denk dat dit dichter bij de oorspronkelijke vragen staat: "Ik probeer uit te zoeken hoe een PARTICULAR TAG kan worden gedownload" dan de oplossing die suggereert dat de hele repository moet worden gekloond. Ik zie niet in waarom iemand een kopie van de broncode van Windows NT en Windows 8.1 zou moeten hebben als ze naar de DOS 0.1-broncode willen kijken (bijvoorbeeld).

Ik wilde ook CHECKOUT niet gebruiken zoals anderen hebben voorgesteld. Ik liet een filiaal controleren en wilde daar geen invloed op hebben. Mijn bedoeling was om de software die ik wilde te halen, zodat ik iets kon uitkiezen en dat aan mijn ontwikkeling kon toevoegen.

Er is waarschijnlijk een manier om de tag zelf op te halen in plaats van alleen een kopie van de commit die is getagd. Ik moest de opgehaalde commit zelf taggen. EDIT: Ah ja, ik heb het nu gevonden.

git fetch gitserver Fix_110:Fix_110

Waar je de dubbele punt ziet, dat is remote-name: local-name en hier zijn het de tag-namen. Dit werkt zonder de werkende boomstructuur te verstoren, etc. Het lijkt gewoon dingen te kopiëren van de afstandsbediening naar de lokale machine, dus je hebt je eigen kopie.

git fetch gitserver --dry-run Fix_110:Fix_110

met de optie --dry-run toegevoegd, kunt u bekijken wat de opdracht zou doen, als u wilt controleren wat u wilt. Dus ik denk dat een eenvoudig

git fetch gitserver remotetag:localtag

is het echte antwoord.

=

Een aparte opmerking over tags ... Wanneer ik iets nieuws begin, tag ik meestal de lege repository na git init, sinds

git rebase -i XXXXX 

vereist een commit en de vraag rijst: "hoe rebase veranderingen die uw eerste softwarewijziging omvatten?" Dus als ik begin te werken, dan wel

git init
touch .gitignore
[then add it and commit it, and finally]
git tag EMPTY

dat wil zeggen creëer een commit voor mijn eerste echte verandering en gebruik later

git rebase -i EMPTY 

als ik al mijn werk wil rebasen, inclusief de eerste wijziging.


13
2017-12-11 17:28



Ik werkte aan het antwoord van Peter Johnson en creëerde een leuk klein alias voor mezelf:

alias gcolt="git checkout \`git tag | sort -V | tail -1\`"

aka 'git checkout laatste tag'.

Dit is afhankelijk van de GNU-versie van sorteren, die op de juiste manier omgaat met situaties zoals de manager opmerkt:

v1.0.1
...
v1.0.9
v1.0.10

Als je een Mac gebruikt, brew install coreutils en dan in plaats daarvan gsort.


7
2018-03-15 16:41