git fetch

git fetch

het git fetch Commando downloadt commits, bestanden en refs van een remote repository in je lokale repo. Ophalen is wat je doet als je wilt zien waar iedereen aan heeft gewerkt. Het is vergelijkbaar met svn update in die zin dat het je laat zien hoe de centrale geschiedenis zich heeft ontwikkeld, maar het dwingt je niet om de wijzigingen daadwerkelijk in je repository te mergen. Git isoleert opgehaalde inhoud van bestaande lokale inhoud; het heeft absoluut geen effect op je lokale ontwikkelingswerk., Opgehaalde inhoud moet expliciet worden uitgecheckt met het git checkout Commando. Dit maakt het Fetchen een veilige manier om commits te beoordelen voordat je ze integreert met je lokale repository.

bij het downloaden van inhoud van een repo op afstand, zijn git pull en git fetch commando ‘ s beschikbaar om de taak uit te voeren. U kunt git fetch beschouwen als de ‘veilige’ versie van de twee commando ‘ s. Het zal de remote content downloaden, maar niet werken van uw lokale repo ‘ s staat, waardoor uw huidige werk intact., git pull is het agressievere alternatief; het zal de remote content downloaden voor de actieve lokale branch en onmiddellijk git merge uitvoeren om een merge commit te maken voor de nieuwe remote content. Als er lopende wijzigingen in uitvoering zijn, zal dit conflicten veroorzaken en de aftrap geven van de merge conflict resolution flow.

hoe git fetch werkt met remote branches

om beter te begrijpen hoe git fetch werkt, laten we bespreken hoe Git commits organiseert en opslaat., Achter de schermen, in de ./.git/objects directory van de repository, slaat Git alle commits op, lokaal en remote. Git houdt remote en local branch commits duidelijk gescheiden door het gebruik van branch refs. De refs voor lokale branches worden opgeslagen in de ./.git/refs/heads/. Het uitvoeren van het git branch commando zal een lijst van de lokale branch refs tonen. Het volgende is een voorbeeld van git branch uitvoer met enkele demo branch namen.,

git branch
master
feature1
debug2

het onderzoeken van de inhoud van de /.git/refs/heads/ map zou vergelijkbare uitvoer onthullen.

ls ./.git/refs/heads/
master
feature1
debug2

remote branches zijn net als lokale branches, behalve dat ze naar commits van de repository van iemand anders toewijzen. Remote branches worden voorafgegaan door de remote waartoe ze behoren, zodat je ze niet vermengt met lokale branches. Net als lokale branches heeft Git ook refs voor remote branches. Remote branch refs live in de./.git/refs/remotes/ map., Het volgende voorbeeld codefragment toont de branches die je zou kunnen zien na het Fetchen van een remote repo met de gunstige naam remote-repo:

git branch -r
# origin/master
# origin/feature1
# origin/debug2
# remote-repo/master
# remote-repo/other-feature

deze uitvoer toont de lokale branches die we eerder hadden onderzocht, maar toont ze nu voorafgegaan met origin/. Daarnaast zien we nu de remote branches voorafgegaan door remote-repo. Je kunt een remote branch net als een lokale uitchecken, maar dit plaatst je in een losstaande HEAD status (net als het uitchecken van een oude commit). Je kunt ze zien als alleen-lezen branches., Om uw remote branches te bekijken, geeft u eenvoudig de -r vlag door aan het git branch Commando.

u kunt remote branches inspecteren met de gebruikelijke git checkout en git log commando ‘ s. Als je de wijzigingen goedkeurt die een remote branch bevat, kun je het mergen in een lokale branch met een normale git merge. In tegenstelling tot SVN is het synchroniseren van je lokale repository met een remote repository eigenlijk een proces in twee stappen: fetch en merge. Het commando git pull is een handige sneltoets voor dit proces.,

Git fetch commando ‘ s en opties

git fetch <remote>

Fetch alle branches uit de repository. Dit downloadt ook alle vereiste commits en bestanden van de andere repository.

git fetch <remote> <branch>

hetzelfde als het bovenstaande commando, maar haal alleen de opgegeven branch op.

git fetch --all

een power move die alle geregistreerde remotes en hun branches ophaalt:

git fetch --dry-run

de optie --dry-run zal een demo uitvoeren van het commando., Het zal voorbeelden van acties die het zal nemen tijdens het fetch uitvoeren, maar ze niet toepassen.

git fetch a remote branch

het volgende voorbeeld zal laten zien hoe je een remote branch fetch en je lokale werkstaat bijwerken naar de remote inhoud. In dit voorbeeld, laten we aannemen dat er een centrale repo oorsprong is van waaruit de lokale repository gekloond is door gebruik te maken van het git clone Commando. Laten we ook uitgaan van een extra remote repository met de naam coworkers_repo die een feature_branch bevat die we zullen configureren en ophalen., Laten we met deze veronderstellingen het voorbeeld voortzetten.

eerst moeten we de remote repo configureren met behulp van het git remote Commando.

git remote add coworkers_repo [email protected]:coworker/coworkers_repo.git

Hier hebben we een verwijzing gemaakt naar de repo van de medewerker met behulp van de repo URL. We zullen die naam nu doorgeven aan git fetch om de inhoud te downloaden.

git fetch coworkers_repo coworkers/feature_branch
fetching coworkers/feature_branch

we hebben nu lokaal de inhoud van coworkers/feature_branch we moeten dit integreren in onze lokale werkkopie., We beginnen dit proces met het git checkout commando om de nieuw gedownloade remote branch uit te checken.

git checkout coworkers/feature_branch
Note: checking out coworkers/feature_branch'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>

De uitvoer van deze checkout-bewerking geeft aan dat we ons in een vrijstaande HEAD bevinden. Dit wordt verwacht en betekent dat onze HEAD ref wijst naar een ref die niet in overeenstemming is met onze lokale geschiedenis. Omdat HEAD is gericht op de coworkers/feature_branch ref, kunnen we een nieuwe lokale branch maken van die ref., De uitvoer ‘detached HEAD ‘ laat zien hoe dit te doen met behulp van degit checkout Commando:

git checkout -b local_feature_branch

Hier hebben we een nieuwe lokale branch gemaakt met de naam local_feature_branch. Dit zet updates HEAD om te wijzen op de laatste remote content en we kunnen verder ontwikkelen op het vanaf dit punt.

synchroniseer origin met git fetch

het volgende voorbeeld loopt door de typische workflow voor het synchroniseren van je lokale repository met de master branch van de centrale repository.,

git fetch origin

Dit toont de branches die zijn gedownload:

De commits van deze nieuwe remote branches worden weergegeven als vierkanten in plaats van cirkels in het onderstaande diagram. Zoals je kunt zien, geeft git fetch je toegang tot de gehele branch structuur van een andere repository.,

om Te zien welke commits zijn toegevoegd aan de upstream-master, kunt u een git log via origin/master als een filter:

git log --oneline master..origin/master

Voor het goedkeuren van de wijzigingen en voeg ze samen in uw lokale master branch gebruik de volgende commando ‘ s:

git checkout master
git log origin/master

Dan kunnen we gebruik maken git merge origin/master:

git merge origin/master

De origin/master en master takken wijzen nu naar de vastlegging, en u zijn gesynchroniseerd met de upstream-ontwikkelingen.,

Git fetch summary

In recensie, git fetch is een primair commando dat gebruikt wordt om inhoud van een remote repository te downloaden. git fetch wordt gebruikt in combinatie met git remote, git branch, git checkout, en git reset om een lokale repository bij te werken naar de status van een remote. Het git fetch commando is een cruciaal onderdeel van samenwerkende Git work flows., git fetch has similar behavior to git pull, however, git fetch can be considered a safer, nondestructive version.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *