git fetch
kommando downloads begår, filer, og refs fra en remote repository i din lokale repo. Henter er, hvad du gør, når du ønsker at se, hvad alle andre har arbejdet på. Det ligner svn update
, idet det giver dig mulighed for at se, hvordan den centrale historie har udviklet sig, men det tvinger dig ikke til faktisk at flette ændringerne i dit arkiv. Git isolerer hentet indhold fra eksisterende lokalt indhold; Det har absolut ingen effekt på dit lokale udviklingsarbejde., Hentet indhold skal eksplicit tjekkes ud ved hjælp af kommandoen git checkout
. Dette gør det muligt at hente en sikker måde at gennemgå commits på, før du integrerer dem med dit lokale lager.
Når du henter indhold fra en ekstern repo, git pull
og git fetch
kommandoer tilgængelige til at udføre opgaven. Du kan overveje git fetch
den ‘sikre’ version af de to kommandoer. Det vil do .nloade det eksterne indhold, men ikke opdatere din lokale Repos arbejdstilstand, hvilket efterlader dit nuværende arbejde intakt., git pull
er den mere aggressive alternativ, og det vil hente eksternt indhold for de aktive lokale afdeling, og umiddelbart udføre git merge
for at oprette en sammenfletning forpligte sig til den nye remote indhold. Hvis du har afventende ændringer i gang, vil dette medføre konflikter og kick-off Flet konfliktløsning Flo..
hvordan git fetch fungerer med eksterne grene
for bedre at forstå, hvordan git fetch
fungerer, lad os diskutere, hvordan Git organiserer og gemmer forpligtelser., Bag kulisserne, i arkivet ./.git/objects
mappe, gemmer Git alle commits, lokale og eksterne. Git holder fjerntliggende og lokale filial forpligter sig tydeligt adskilt ved brug af filial refs. Refs for lokale filialer gemmes i ./.git/refs/heads/
. Udførelse af kommandoen git branch
udsender en liste over de lokale afdelingsrefs. Følgende er et eksempel på git branch
output med nogle demo gren navne.,
git branch
master
feature1
debug2
undersøgelse af indholdet af /.git/refs/heads/
– mappen ville afsløre lignende output.
ls ./.git/refs/heads/
master
feature1
debug2
Fjernafdelinger er ligesom lokale filialer, medmindre de kortlægger til commits fra en andens arkiv. Fjernafdelinger præfikses af den fjernbetjening, de hører til, så du ikke blander dem med lokale filialer. Ligesom lokale grene har Git også refs til fjerntliggende grene. Remote branch refs bor i./.git/refs/remotes/
mappen., Det næste eksempel kodestykke viser de afdelinger, du kan se efter at hente en fjernbetjening repo bekvemt ved navn remote-repo:
git branch -r
# origin/master
# origin/feature1
# origin/debug2
# remote-repo/master
# remote-repo/other-feature
Denne udgang viser den lokale afdelinger vi havde tidligere undersøgt, men nu viser dem begynder med origin/
. Derudover ser vi nu de fjerntliggende grene, der er præfikset med remote-repo
. Du kan tjekke en fjerngren ligesom en lokal, men dette sætter dig i en løsrevet HEAD
tilstand (ligesom at tjekke en gammel commit). Du kan tænke på dem som skrivebeskyttede grene., For at se dine fjernafdelinger skal du blot sende kommandoen -r
til kommandoen git branch
.
Du kan inspicere fjernafdelinger med de sædvanlige kommandoer git checkout
og git log
. Hvis du godkender de ændringer, en fjerngren indeholder, kan du flette den til en lokal gren med en normal git merge
. Så i modsætning til SVN er synkronisering af dit lokale depot med et fjernlager faktisk en to-trins proces:Hent, og flet derefter. Kommandoen git pull
er en praktisk genvej til denne proces.,
Git Hent kommandoer og indstillinger
git fetch <remote>
Hent alle grene fra arkivet. Dette do .nloader også alle de nødvendige forpligtelser og filer fra det andet arkiv.
git fetch <remote> <branch>
samme som ovenstående kommando, men Hent kun den angivne gren.
git fetch --all
En magt bevæge sig, som henter alle registrerede fjernbetjeninger, og deres filialer:
git fetch --dry-run
--dry-run
option vil udføre en demo kørsel af kommando., Det vil output eksempler på handlinger, det vil tage under hente, men ikke anvende dem.
git hent en fjerngren
følgende eksempel viser, hvordan du henter en fjerngren og opdaterer din lokale arbejdstilstand til fjernindholdet. Lad os i dette eksempel antage, at der er en central repo-oprindelse, hvorfra det lokale Depot er blevet klonet fra at bruge kommandoen git clone
. Lad os også antage et ekstra fjernlager ved navn Co .orkers_repo, der indeholder en feature_branch, som vi vil konfigurere og hente., Med disse antagelser sæt lad os fortsætte eksemplet.for det første skal vi konfigurere fjernbetjeningen repo ved hjælp af kommandoen git remote
.
git remote add coworkers_repo [email protected]:coworker/coworkers_repo.git
Her har vi oprettet en henvisning til kollegerens repo ved hjælp af repo-URL ‘ en. Vi vil nu videregive det eksterne navn til git fetch
for at do .nloade indholdet.
git fetch coworkers_repo coworkers/feature_branch
fetching coworkers/feature_branch
Vi har nu lokalt indholdet af kolleger / feature_branch vi har brug for integrerer dette i vores lokale arbejdskopi., Vi begynder denne proces ved at bruge kommandoen git checkout
til at tjekke den nyligt do .nloadede fjerngren.
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>
udgangen fra denne checkout-operation indikerer, at vi er i en løsrevetHEAD
tilstand. Dette forventes og betyder, at voresHEAD
ref peger på en ref, der ikke er i overensstemmelse med vores lokale historie. At være, at HEAD
er peget på co reforkers / feature_branch ref, kan vi oprette en ny lokal filial fra denne ref., Den ” løsrevne HEAD
‘ output viser os, hvordan til at gøre dette ved hjælp af git checkout
kommando:
git checkout -b local_feature_branch
Her har vi skabt en ny lokal afdeling opkaldt local_feature_branch. Dette sætter opdateringer HEAD
for at pege på det seneste eksterne indhold, og vi kan fortsætte udviklingen på det fra dette punkt.
Synkroniser oprindelse med git hente
følgende eksempel går gennem den typiske arbejdsgang for synkronisering af din lokale repository med den centrale repository ‘ s master-branch.,
git fetch origin
Dette viser de grene, der blev do .nloadet:
commits fra disse nye fjerntliggende grene vises som firkanter i stedet for cirkler i diagrammet nedenfor. Som du kan se, giver git fetch
dig adgang til hele filialstrukturen i et andet arkiv.,
for at se, hvilke commits der er blevet tilføjet til opstrømsmasteren, kan du køre en git log
ved hjælp af origin/master som filter:
git log --oneline master..origin/master
for at godkende ændringerne og flette dem ind i din lokale mastergren skal du bruge følgende kommandoer:
git checkout master
git log origin/master
så kan vi bruge git merge origin/master
:
git merge origin/master
oprindelses – /Master-og master-grenene peger nu på det samme commit, og du er synkroniseret med opstrømsudviklingen.,
Git fetch summary
i anmeldelse er git fetch
en primær kommando, der bruges til at do .nloade indhold fra et eksternt lager. git fetch
, som bruges i forbindelse med git remote
git branch
git checkout
og git reset
for at opdatere en lokal arkiv til den tilstand af en fjernbetjening. Kommandoen git fetch
er et kritisk stykke samarbejde git – arbejdsgange., git fetch
has similar behavior to git pull
, however, git fetch
can be considered a safer, nondestructive version.