segunda-feira, 13 de junho de 2016

3.5 Git branĉantaj - Foraj (Remote) Branĉoj

3.5 Git branĉantaj - Foraj (Remote) Branĉoj

Fora referencoj estas referencoj (punteros) en via fora deponejoj, inter branĉoj, etikedoj, kaj tiel plu. Vi povas akiri kompletan liston de fora referencoj eksplicite kun git ls-remote [remote] , aŭ git remote show [remote] por foraj branĉoj tiel kiel pli informo. Tamen, pli komuna vojo estas utiligi fora-spurado branĉoj.
 
Fora-spurado brancxoj estas referencoj al la stato de foraj branĉoj. Ili estas lokaj referencoj ke vi povas movi; ili estas movita aŭtomate por vi kiam vi fari ajnan reto komunikado. Fora-spurado branĉoj agi kiel legosignojn memorigi vin kie la branĉoj en via fora deponejoj estis la lasta tempo vi konektis al ili.
Ili prenas la formon (remote)/(branch) . Ekzemple, se vi volas vidi kion la master branĉo sur via origin fora similis kiel de la lasta tempo vi komunikis kun ĝi, vi kontrolus la origin/master branĉo. Se vi laboras pri temo kun partnero kaj ili puŝis kontrauxulon iss53 branĉo, vi eble havos vian propran lokan iss53 branĉo; sed la branĉo sur la servilo notus al la commit de origin/iss53 .
 
Tio povas esti iom konfuza, do ni rigardu ekzemplon. Imagu ke vi havas Git servilo en via reto ĉe git.ourcompany.com . Se vi kloni el tiu, Git la clone komando aŭtomate nomoj origin por vi, tiras malsupren cxiujn liajn datumojn, kreas sagon al kie lia master brancxo, kaj nomoj ĝi origin/master loke. Git ankaŭ donas vin via propra loka master branĉo startanta je la sama loko kiel origino la master branĉo, do vi havas ion labori de.

noto: "Origino" estas ne speciala

Ĝuste kiel la branĉo nomo "majstro" ne havas neniun specialan signifon en Git, nek faras "origino". Dum "majstro" estas la defaŭlta nomo por startanta branĉo kiam vi kuros git init kiu estas la nura kialo ĝi estas vaste uzata, "origino" estas la defaŭlta nomo por fora kiam vi kuros git clone . Se vi kuras git clone -o booyah anstataŭe, tiam vi havos booyah/master kiel via defaŭlta fora branĉo.
Servilo kaj lokaj deponejoj post klonado.
Figuro 3-22. Servilo kaj lokaj deponejoj post klonado
Se vi fari iun laboron sur via loka master branĉo, kaj, intertempe, iu alia pelas git.ourcompany.com kaj ĝisdatigas lia master branĉo, tiam via historioj antaŭeniri malsame. Ankaŭ, kiel longe kiel vi restu ekster kontakto kun via origino servilo, via origin/master montrilon ne movas.
Lokaj kaj foraj laboro povas diverĝas.
Figuro 3-23. Lokaj kaj fora laboro povas malkonverĝi
Sinkronigi vian laboron, vi kuri git fetch origin komando. Admono suprenrigardas kiu servilo "origino" estas (en tiu kazo, ĝi estas git.ourcompany.com ), akiras ajnan datumon de ĝi ke vi ankoraŭ ne havas, kaj ĝisdatigas via loka datumbazo, movanta via origin/master montrilon al lia nova, pli supren-ĝis-dato pozicio.
`Git fetch` ĝisdatigas via fora referencoj.
Figuro 3-24. git fetch ĝisdatigojn via fora referencoj
Pruvi havi multoblajn foraj serviloj kaj kion foraj branĉoj por tiuj foraj projektoj aspekti, ni supozu vi havas alian internan Git servilo kiu estas uzita nur por disvolviĝo per unu el viaj spurto teamoj. Tiu servilo estas ĉe git.team1.ourcompany.com . Vi povas aldoni ĝin kiel nova fora referenco al la projekto vi aktuale prilaboras per kurante la git remote add komandon kiel ni kovris en Git Bazaj . Nomu tiu fora teamone , kiu estos via shortname por ke tutaj URL.
Aldonante alian servilo kiel fora.
Kalkuli 3-25. Aldonante alian servilo kiel fora
Nun vi povas kuri git fetch teamone venigi ĉiun la fora teamone servilo havas ke vi ne havas ankoraŭ. Ĉar tiu servilo havas subaro de la datumoj vian origin servilo havas nun, Git akiras datumoj sed metas fora-spurado branĉo nomita teamone/master atentigi al la commit ke teamone havas kiel master branĉo.
Fora sekvado branĉo por `teamone / master`.
Figuro 3-26. Izolita sekvado branĉo por teamone/master

puŝante

Kiam vi volas dividi branĉo kun la mondo, vi bezonas puŝi ĝin al fora ke vi havas skribpermeson por. Lokalajn branĉoj ne aŭtomate sinkronigita al la Remotes vi skribu al - vi devas eksplicite puŝi la branĉoj ili volas dividi. KE vojo, Vi povas uzi privatajn branĉoj por laboro vi ne volas dividi, kaj puŝi supren nur la temo branĉoj vi volas kunlabori plu.
Se vi havas branĉon nomita serverfix ke vi deziras labori sur kun aliaj, vi povas puŝi ĝin la sama vojo vi puŝis vian unuan branĉon. Kuri git push <remote> <branch> :
  $ Git puŝo origino serverfix
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/schacon/simplegit
 * [new branch] serverfix -> serverfix 
Tiu estas iom de ŝparvojo. Git aŭtomate vastigas la serverfix branchname al refs/heads/serverfix:refs/heads/serverfix , kio signifas "Prenu mian serverfix loka branĉo kaj puŝi ĝin al ĝisdatigi la fora la serverfix branĉo." Ni transiru la refs/heads/ parto detale en Git internals , sed vi povas ĝenerale forlasi ĝin. Vi povas ankaŭ fari git push origin serverfix:serverfix , kiuj faras la saman aferon - li diras, "Prenu mian serverfix kaj fari la fora la serverfix." Vi povas uzi tiun formaton por puŝi loka branĉo en fora branĉo nomata alimaniere . Se vi ne volas ĝin nomi serverfix sur la fora, vi povus anstataŭe kuras git push origin serverfix:awesomebranch puŝi vian lokan serverfix branĉo al la awesomebranch branĉo sur la fora projekto.
noto

Ne tajpas vian pasvorton ĉiufoje

Se vi uzas HTTPS URL puŝi super la Git-servilo petos vin pri via uzantnomo kaj pasvorto por aŭtentokontrolo. Defaŭlte ĝi instigos vin sur la fina stacio por tiu informo tiel la servilo povas diri se vi rajtas puŝi.
Se vi ne volas tajpi ĝin ĉiu ununura tempo vi puŝi, vi povas starigi "credencial kaŝmemoro". La plej simpla estas ĝuste konservi ĝin en memoro dum kelkaj minutoj, kiujn vi povas facile agordi per kurado git config --global credential.helper cache .
Por pli informo sur la diversaj credencial caching ebloj disponeblaj, vidi Credencial Tenado .
La venontan fojon unu el viaj kunlaborantoj akiras de la servilo, ili ricevos referenco al kie la servila versio de serverfix estas sub la fora branĉo origin/serverfix :
  $ Git venigu origino
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/schacon/simplegit
 * [new branch] serverfix -> origin/serverfix 
Estas grave noti, ke kiam vi faros venigi kiu alportas malsupren nova fora-spurado branĉoj, vi ne aŭtomate havas lokan, redakteblaj kopiojn de ili. Alivorte, en tiu kazo, vi ne havas novan serverfix branĉo - vi nur havas origin/serverfix puntero ke vi ne povas modifi.
Kunfandi ĉi laboro en via nuna laboro branĉo, vi povas kuri git merge origin/serverfix . Se vi volas vian propran serverfix brancxon vi povas labori sur, vi povas bazi vian fora-spurado branĉo:
  $ Git kaso -b serverfix origino / serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix' 
Tio donas al vi lokan filion ke vi povas labori sur kiu komenciĝas kie origin/serverfix estas.

Spuranta Branĉoj

Kontrolanta loka branĉo de fora-spurado branĉo aŭtomate kreas kio nomiĝas "sekvado branĉo" (kaj la branĉo ĝi spuras nomiĝas "kontraŭflue branĉo"). Spuranta branĉoj estas lokaj filioj kiuj havas rektan rilaton al fora branĉo. Se vi estas sur sekvado branĉo kaj tipon git pull , Git aŭtomate scias kion servilo por preni de kaj branĉo kunfandi en.
Kiam vi kloni deponejo, ĝi ĝenerale aŭtomate kreas master branĉo kiu spuras origin/master . Tamen, vi povas instali aliajn sekvado branĉoj se vi deziras - kiuj spuras branĉoj sur aliaj Remotes, aŭ ne spuri la master branĉo. La simpla kazo estas la ekzemplo vi ĵus vidis, kurante git checkout -b [branch] [remotename]/[branch] . Tiu estas komuna sufiĉe operacio kiu git provizas la --track stenografio:
  $ Git kaso --track origino / serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix' 
Fakte, tio estas tiel komuna, ke estas eĉ ŝparvojo por ŝparvojo. Se la branĉo nomo vi provas kaso (al) ne ekzistas kaj (b) ekzakte egalas nomon sur nur unu fora, Git kreos sekvado branĉo por vi:
  $ Git kaso serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix' 
Starigi lokan filion kun malsama nomo ol la izolita branĉo, vi povas facile uzi la unuan version kun malsama loka branĉo nomo:
  $ Git kaso -b sf origino / serverfix
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf' 
Nun, via loka branĉo sf aŭtomate tiri el origin/serverfix .
Se vi jam havas lokan branĉon kaj volas restarigi gxin al malproksima branĉo vi ĵus tirita malsupren, aŭ volas ŝanĝi la kontraŭflua branĉo vi sekvado, vi povas uzi la -u--set-upstream-to eblo git branch eksplicite metis ĝin ĉe ajna tempo.
  $ Git branĉo -u origino / serverfix
Branch serverfix set up to track remote branch serverfix from origin. 
noto

kontraŭflue stenografio

Kiam vi havas sekvado branĉo instalita, vi povas referenci ĝia kontraŭflua branĉo kun la @{upstream}@{u} stenografio. Sekve se vi estas sur la master branĉo kaj ĝi spuras origin/master , vi povas diri ion kiel git merge @{u} anstataŭ git merge origin/master se vi deziras.
Se vi deziras vidi kion sekvado branĉoj vi starigis, vi povas uzi la -vv eblon git branch . Ĉi listigos vian lokan branĉoj kun pli informo inkluzivanta kio ĉiu branĉo estas spurado kaj se via loka branĉo estas antaŭe, malantaŭe aŭ ambaŭ.
  $ Git branĉo -vv
 iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
 master 1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it
 testing 5ea463a trying something new 
Do jen ni vidas ke nia iss53 branĉo estas sekvado origin/iss53 kaj estas "antaŭen" per du, kio signifas ke ni havas du interna loke kiuj ne puŝita al la servilo. Ni ankaŭ povas vidi ke nia master branĉo estas sekvado origin/master kaj estas ĝisdata. Ni tuj povas vidi ke nia serverfix branĉo estas spuras la server-fix-good branĉo sur nia teamone servilo kaj estas antaŭeniras por tri kaj malantaŭe per unu, Signifanta ke la sama faris sur la servilo ni ne kunfalis en ankoraŭ tri interna loke ke ni ne puŝis. Ni fine povas vidi ke niaj testing branĉo ne sekvado ajna fora branĉo.
Estas grave noti, ke tiuj nombroj estas nur ekde la lasta tempo vi prenis el ĉiu servilo. Tiu komando ne atingi ekstere al la serviloj, ĝi estas diranta vin pri kio ĝi cached el tiuj serviloj loke. Se vi volas tute ĝisdata antaŭen kaj malantaŭ nombroj, vi bezonos por alporti de cxiuj viaj Remotes ĝuste antaŭ kuri ĉi. Vi povus fari tion tiel: git fetch --all; git branch -vv git fetch --all; git branch -vv

tirante

Dum la git fetch komando alportos malsupren ĉiujn ŝanĝojn sur la servilo, kiun vi ne havas ankoraŭ, ĝi ne modifas vian labordosierujon ajn. Ĝi simple akiras la datumojn por kaj vin kunfandi ĝin mem. Tamen, tie estas komando nomita git pull kiu estas esence git fetch tuj sekvata de git merge en plej kazoj. Se vi havas sekvado branĉo starigis kiel pruvis en la lasta sekcio, ĉu per eksplicite fiksante ĝin aŭ havi ĝin kreis por vi de la clonecheckout komandojn, git pull mi atendas kion servilo kaj disbranĉigi viaj nunaj branĉo estas sekvado, venigi de tiu servilo kaj tiam provu kunfandi en tiu fora branĉo.
Ĝenerale estas pli bone simple uzi la fetch kaj merge komandojn eksplicite kiel la magio de git pull povas ofte esti konfuza.

Viŝante Izolita Branĉoj

Supozi vi faris kun fora branĉo - diru al vi kaj viaj kunlaborantoj estas finita kun esprimilo kaj kunfandis ĝin en via fora la master branĉo (aŭ ajna branĉo via stabila codeline estas). Vi povas forviŝi fora branĉo uzante la --delete eblon git push . Se vi volas forigi vian serverfix branĉo de la servilo, vi kuras la sekvaj:
  $ Git puŝo origino --delete serverfix
To https://github.com/schacon/simplegit
 - [deleted] serverfix 
Esence ĉiuj ĉi faras estas forigi la puntero de la servilo. La Git servilo ĝenerale konservi la datumojn tie por tempeto ĝis rubo kolekto kuras, do se oni hazarde forviŝita, ĝi estas ofte facile rekuperi.

3.4 Git branĉantaj - branĉantaj fluoj de laboro

3.4 Git branĉantaj - branĉantaj fluoj de laboro

Nun ke vi havas la basics de branĉantaj kaj kunfalado malsupren, kio povas aŭ devus vin fari kun ili? En tiu sekcio, ni kovri iuj komunaj fluoj de laboro ke tiu malpeza disbranĉadon ebligas, do vi povas decidi se vi ŝatus korpigi ĝin en via propra disvolviĝo ciklo.

Longdaŭraj Branĉoj

Ĉar Git uzas simplan tridirekta merge, kunfando de unu branĉo al alian plurfoje dum longa periodo estas ĝenerale facila por fari. Tiu signifas ke vi povas havi plurajn branĉojn kiuj estas ĉiam malfermita kaj ke vi uzas por malsamaj etapoj de via ciklo de disvolviĝo; vi povas kunfandi regule de iuj de ili en aliaj.
Multaj Git programistoj havas laborfluo kiuj ampleksas tiu alproksimiĝo, kiel havanta nur kodo kiu estas tute stabilaj en sia master branĉo - eble nur kodo kiu estis aŭ estos publikigita. Ili alia paralela branĉo nomita developnext ke ili laboras de aŭ uzi testi stabileco - ne nepre ĉiam stabila, sed kiam alvenas al stabila stato, ĝi povas esti kunfandita en master . Ĝi estas uzata por tiri en temo branĉoj (mallongdaŭra branĉoj, kiel via antaŭa iss53 branĉo) kiam ili estas pretaj, por certigi ke ili pasas ĉiujn provojn kaj ne enkonduki cimojn.
Fakte, ni parolas pri punteros movanta supren la linion de interna vi faras. La stabila brancxoj estas pli malsupre la linion en via commit historio, kaj la sangadon-rando brancxoj estas pluen ĝis la historio.
Lineara Konsiderante progresemaj-stabileco branĉantaj.
Figuro 3-18. Lineara Konsiderante progresemaj-stabileco branĉantaj
Ĝi estas ĝenerale pli facile pensi pri ili kiel laboron siloj, kie aroj de interna diplomiĝinto al pli stabila silon kiam ili estas plene testita.
A `` silo '' vido de progresiva-stabileco branĉantaj.
Figuro 3-19. Al "silo" Konsiderante progresemaj-stabileco branĉantaj
Vi povas daŭre fari tion por pluraj niveloj de stabileco. Kelkaj pli grandaj projektoj ankaŭ havas proposedpu (proponita ĝisdatigoj) branĉo kiu integris branĉoj kiuj povas ne esti preta por iri en la nextmaster branĉo. La ideo estas ke viaj brancxoj estas ĉe diversaj niveloj de stabileco; Kiam ili atingas pli stabila nivelo, ili estas kunfandita en la branĉo super ili. Denove, havanta multoblajn longdaŭra branĉoj ne estas necesa, sed ĝi estas ofte helpema, speciale kiam vi pritraktas tre grandaj aŭ kompleksaj projektoj.

Temaj Branĉoj

Temo branĉoj, tamen, estas utila en projektoj de ajna grandeco. Al temo brancxo mallongdaŭra branĉo kiu vi krei kaj uzi por sola aparta karakterizaĵo aŭ rilata laboro. Tio estas io vi probable neniam faris kun VCS antaŭ ĉar ĝi estas ĝenerale tro multekostaj por krei kaj kunfandi branĉoj. Sed en Git estas komuna krei, labori sur, kunfandi, kaj forigi branĉoj plurfoje tage.
Vi vidis tiun en la lasta sekcio de la iss53 kaj hotfix branĉoj vi kreis. Vi faris kelkajn interna ilin kaj forigita ilin rekte post kunfalado ilin en via ĉefa branĉo. Tiu tekniko permesas kuntekstan ŝaltilo rapide kaj tute - ĉar via laboro estas apartigita en siloj kie ĉiuj ŝanĝoj en tiu branĉo devas vidi kun tiu temo, estas pli facile vidi kio okazis dum kodo revizio kaj tian. Vi povas konservi la ŝanĝojn tie por minutoj, tagoj, monatoj, kaj kunfandi ilin en kiam ili estas pretaj, nekonsiderante la ordo en kiu ili estis kreitaj aŭ prilaboris.
Konsideri ekzemplon de fari iun laboron (sur master ), disbranĉiĝas por temo ( iss91 ), laborante en ĝi por iom, disbranĉiĝas la dua branĉo provi alimaniere pritrakti la samo ( iss91v2 ), irante reen al via master branĉo kaj laboris tie por tempeto, kaj tiam disbranĉiĝas tie fari iun laboron kiu vi ne estas certa estas bona ideo ( dumbidea branĉo). Via commit historio aspektos ion kiel jene:
Multoblaj temo branĉoj.
Figuro 3-20. Multoblaj temo branĉoj
Nun diru vi decidas vin kiel la dua solvo al via problemo bona ( iss91v2 ); kaj vi montris la dumbidea branĉo al via kunlaborantoj, kaj ĝi montriĝas por geniulo. Vi povas forĵeti la originalan iss91 branĉo (perdanta faras C5 kaj C6 ) kaj kunfalas en la aliaj du. Via historio tiam aspektas tiel:
Historio post kunfalado `dumbidea` kaj` iss91v2`.
Kalkuli 3-21. Historio post kunfalado dumbidea kaj iss91v2
Ni iros en pli detalo pri la diversaj eblaj fluoj de laboro por via Git projekto en Distribuita Git , do antaŭ vi decidas kion disbranĉadon skemo via venonta projekto uzos, nepre legu tiun ĉapitron.
Estas grave memori, kiam vi faras cxiujn cxi tiuj branĉoj estas tute lokaj. Kiam vi branĉantaj kaj kunfalado, ĉio estas farata nur en via Git-deponejo - neniu servilo komunikado okazas.

3.3 Git branĉantaj - Branĉa Administro (Management)

3.3 Git branĉantaj - Branĉa Administro (Management)

Nun ke vi kreis, kunfalis kaj forigita iuj branĉoj, ni rigardu iuj branĉo-mastrumado iloj kiu eniros oportunan kiam vi komencas uzanta branĉoj ĉiam.
La git branch ordono faras pli ol nur krei kaj forigi branĉoj. Se vi kuri ĝin sen argumentoj, vi ricevos simplan liston de viaj nunaj branĉoj:
  $ Git branĉo
 iss53
* master
 testing 
Rimarki la * karakteron kiu Prefiksoj la master branĉo: ĝi indikas la branĉo kiu vi nun kontrolis eksteren (te, la branĉo kiu HEAD punktoj). Tio signifas ke se vi faras en tiu punkto, la master branĉo estos movita antaŭen kun via nova laboro. Vidi la lasta faras en ĉiu branĉo, vi povas kuri git branch -v :
  $ Git branĉo -v
 iss53 93b412c fix javascript issue
* master 7a98805 Merge branch 'iss53'
 testing 782fd34 add scott to the author list in the readmes 
La utila --merged kaj --no-merged opcioj povas filtri tiun liston al branĉoj ke vi havas aŭ ankoraŭ ne kunfalis en la branĉo vi aktuale plu. Vidi kiun branĉoj jam kunfandita en la branĉo vi estas sur, Vi povas kuri git branch --merged :
  $ Git branĉo --merged
 iss53
* master 
Ĉar vi jam kunfalis en iss53 antaŭe, vi vidos ĝin en via listo. Branĉoj en tiu listo sen la * antaŭ ili ĝenerale bone forigi kun git branch -d ; vi jam korpigis ilia laboro en alia branĉo, do vi ne tuj perdi nenion.
Vidi ĉiujn branĉojn kiuj enhavas laboron vi ankoraŭ ne kunfalis en, vi povas kuri git branch --no-merged :
  $ Git branĉo --no-kunfalis
 testing 
Tio montras vian alia branĉo. Ĉar ĝi enhavas laboro kiu ne kunfalis en ankoraŭ, klopodante forigi ĝin kun git branch -d malsukcesos:
  $ Git branĉo -d testado
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'. 
Se vi vere volas forigi la branĉo kaj perdi tiun laboron, vi povas devigi gxin per -D , kiel la helpema mesaĝo atentigas.

3.2 Git branĉantaj - Bazaj branĉantaj kaj kunfando

3.2 Git branĉantaj - Bazaj branĉantaj kaj kunfando

Ni iru tra simpla ekzemplo de branĉantaj kaj kunfalado kun laborfluo ke vi povus uzi en la reala mondo. Vi sekvu tiujn paŝojn:
  1. Ĉu labori sur retejo.
  2. Krei branĉon por nova rakonto vi laboras plu.
  3. Fari iun laboron en tiu branĉo.
En tiu stadio, Vi ricevos alvokon ke alia afero estas maltrankviliga kaj vi bezonas hotfix. Vi faros la sekvajn:
  1. Ŝanĝi viajn produktado branĉo.
  2. Krei branĉon aldoni la hotfix.
  3. Post ĝi estas provita, kunfandi la hotfix branĉo kaj frapas al produktado.
  4. Ŝanĝi reen al via originala rakonto kaj daŭre labori.

baza branĉantaj

Unue, diru vi laboras en via projekto kaj havas paron de interna jam.
Simpla fari historion.
Figuro 3-10. Simpla commit historio
Vi decidis ke vi estas iranta labori sur temo numero 53 en ajna temo-sekvado sistemo via kompanio uzas. Krei branĉon kaj ŝanĝi al ĝi samtempe, vi povas kuri la git checkout komando kun la -b ŝaltilo:
  $ Git kaso -b iss53
Switched to a new branch "iss53" 
Tio estas stenografio por:
  $ Git branĉo iss53
 $ Git kaso iss53 
Kreante nova branĉo montrilo.
Figuro 3-11. Krei novan branĉon montrilon
Vi laboras en via retejo kaj fari iu interna. Farante tiel movas la iss53 branĉo antaŭen, ĉar vi havas ĝin Taksis (te viajn HEAD notas al tio):
  $ Vim index.html
 $ Git commit -a -m 'added a new footer [issue 53]' 
La iss53 branĉo movis antaŭen kun via laboro.
Figuro 3-12. La iss53 branĉo movis antaŭen kun via laboro
Nun vi ricevas la alvokon kiu estas temo kun la retejo, kaj necesas korekti ĝin tuj. Kun Git, vi ne devas disfaldi vian solvon kune kun la iss53 ŝanĝojn vi faris, kaj vi ne devas meti multe da penado en revertir tiuj ŝanĝoj antaux vi povas labori sur apliki solvon al kio estas en produktado. Ĉiuj vi devas fari estas reiri al via master branĉo.
Tamen, antaŭ ol fari tion, rimarku ke se via labordosierujon aŭ enscenigante areo havas uncommitted ŝanĝoj kiuj konfliktas kun la branĉo vi ekiras, Git ne permesos vin ŝanĝi branĉoj. Ĝi estas bona havi puran laborista stato kiam vi ŝanĝos branĉoj. Ekzistas manieroj por preni ĉirkaŭ ĉi (nome stashing farante amendi) kiu kovros poste, en Stashing kaj Pureco . Nuntempe, ni supozu vi faris ĉiujn viajn ŝanĝojn, do vi povas reiri al via master branĉo:
  $ Git kaso mastro
Switched to branch 'master' 
Ĉe tiu punkto, via projekto laboranta dosierujo estas ĝuste la vojo ĝi estis antaŭ vi komencis labori pri temo numero 53, kaj povas koncentri sur via hotfix. Tio estas grava punkto memori: kiam vi ŝanĝos branĉoj, Git restarigas vian labordosierujon rigardi kiel ĝi faris la lastan fojon vi faris en tiu branĉo. Ĝi aldonas, forigas, kaj modifas dosierojn aŭtomate certigi via laboranta kopio estas kion la branĉo rigardis kiel en via lasta faras al ĝi.
Sekva, Vi havas hotfix fari. Ni kreos hotfix branĉo sur kiu labori ĝis ĝi estas finita:
  $ Git kaso -b hotfix
Switched to a new branch 'hotfix'
 $ Vim index.html
 $ Git commit -a -m 'fixed the broken email address'
[hotfix 1fb7853] fixed the broken email address
 1 file changed, 2 insertions(+) 
Hotfix branĉo bazita sur `master`.
Figuro 3-13. Hotfix branĉo surbaze master
Vi povas kuri vian provoj, certigi la hotfix estas kion vi deziras, kaj kunfandi ĝin en vian master branĉo deploji al produktado. Vi faras tion per la git merge komando:
  $ Git kaso mastro
 $ Git merge hotfix
Updating f42c576..3a0874c
Fast-forward
 index.html | 2 ++
 1 file changed, 2 insertions(+) 
Vi rimarkos la frazo "rapida antaŭen" en tiu merge. Ĉar la commit C4 almontras la branĉo hotfix vi kunfalis en estis rekte antaŭ la commit C2 vi estas sur, Git simple movas la montrilon antaŭen. Al frazo kiu alia vojo, kiam vi provas kunfandi unu faras kun fari ke povas esti atingita sekvante la unua fari la historion, Git simpligas aferojn movante la montrilon antaŭen ĉar ne ekzistas diferencaj laboro por kunfandi kune - tio nomiĝas " rapida antaŭen. "
Via ŝanĝo estas nun en la instantánea de la commit pintaj al la master branĉo, kaj vi povas disfaldi la solvon.
`Master` estas rapida plusendita al` hotfix`.
Figuro 3-14. master estas rapida plusendita al hotfix
Post via super- grava fix estas deplojitaj, vi pretas reiri al la laboro vi faris antaux vi interrompis. Tamen, unue vi devos forigi la hotfix branĉo, ĉar vi ne plu bezonas ĝin - la master branĉo punktoj al la sama loko. Vi povas forigi ĝin per la -d elekto git branch :
  $ Git branĉo -d hotfix
Deleted branch hotfix (3a0874c). 
Nun vi povas reiri al via agado-en-progreso branĉo sur temo numero 53 kaj daŭre labori sur ĝi.
  $ Git kaso iss53
Switched to branch "iss53"
 $ Vim index.html
 $ Git commit -a -m 'finished the new footer [issue 53]'
[iss53 ad82d7a] finished the new footer [issue 53]
1 file changed, 1 insertion(+) 
Laboro daŭras sur `iss53`.
Kalkuli 3-15. Laboro daŭras sur iss53
Ĝi valoras notanta tie ke la laboro vi faris en via hotfix branĉo ne enhavita en la dosierojn en via iss53 branĉo. Se vi bezonas tiri ĝin, vi povas kunfandi viajn master branĉo en vian iss53 branĉo de kuranta git merge master , aŭ vi povas atendi integri tiujn ŝanĝojn ĝis vi decidas tiri la iss53 branĉo reen en master poste.

baza kunfando

Supozi vi decidis, ke via temo numero 53 laboro estas kompleta kaj preta esti kunfandita en via master branĉo. Por fari tion, vi kunfandi viajn iss53 branĉo en master , multe kiel vi kunfalis via hotfix branĉo antaŭe. Ĉiuj vi devi fari estas kontroli la branĉo vi volas kunfandi en kaj poste ekzekuti la git merge komando:
  $ Git kaso mastro
Switched to branch 'master'
 $ Git merge iss53
Merge made by the 'recursive' strategy.
index.html | 1 +
1 file changed, 1 insertion(+) 
Tio aspektas iom malsama ol la hotfix kunfandi vi faris antaŭe. Tiukaze, via evoluo historio diverĝis el kelkaj malnovaj punkto. Ĉar la commit de la branĉo vi estas sur ne estas rekta prapatro de la branĉo vi kunfalado en, Git devas fari iun laboron. Tiukaze, Git faras simplan tridirekta merge, uzante la du instantáneas almontras la branĉo konsiletoj kaj la komuna prapatro de la du.
Tri instantáneas uzita en tipa merge.
Kalkuli 3-16. Tri instantáneas uzita en tipa merge
Anstataŭ simple kopii la branĉo montrilon antaŭen, Git kreas novan instantánea kiu rezultas de tiu triopa merge kaj aŭtomate kreas novan fari ke punktoj al ĝi. Tio estas referita kiel merge fari, kaj estas speciala ĉar ĝi havas pli ol unu gepatro.
A merge fari.
Kalkuli 3-17. A merge commit
Ĝi valoras markante ke Git determinas la plej komuna praulo uzi por lia merge bazo; tiu estas malsama ol malnovaj iloj kiel CVS aŭ Subversion (antaŭ versio 1.5), kie la desarrollador faras la merge devis diveni la plej merge bazo por si. Tio igas kunfalado heck de multe pli facila en Git ol en tiuj aliaj sistemoj.
Nun ke via verko estas kunfanditaj en, vi ne plu bezonas la iss53 branĉo. Vi povas fermi la bileto en via bileto-sekvado sistemo kaj forigi la branĉo:
  $ Git branĉo -d iss53 

Baza Merge Konfliktoj

Foje, tiu procezo ne iras glate. Se vi ŝanĝis la sama parto de la sama dosiero malsame en la du branĉoj vi kunfandante kune, Git ne povos kunfandi ilin pure. Se via fix por temo numero 53 modifis la sama parto de dosiero la hotfix , vi ricevos merge konflikto kiu aspektas io tiamaniere:
  $ Git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result. 
Git ne aŭtomate kreita nova merge fari. Ĝi paŭzis la procezo dum vi solvas la konflikton. Se vi volas vidi kio dosieroj unmerged ĉe ajna punkto post merge konflikto, vi povas kuri git status :
  $ Git statuso
On branch master
You have unmerged paths.
 (fix conflicts and run "git commit")

Unmerged paths:
 (use "git add <file>..." to mark resolution)

 both modified: index.html

no changes added to commit (use "git add" and/or "git commit -a") 
Io ajn kiu havas kunfandi konfliktoj kaj ne estis solvita estas listigita kiel unmerged. Git aldonas normo konfliktosolvado markiloj al la dosieroj, kiuj havas konfliktojn, do vi povas malfermi ilin permane kaj solvi tiujn konfliktojn. Via dosiero enhavas sekcion, kiu aspektas io tiamaniere:
  <<<<<<< KAPO: index.html
 < Div id = "footer" > kontakto: email.support@github.com < / div >
 =======
 < Div id = "footer" >
  bonvolu kontakti nin ĉe support@github.com
 < / Div >
 >>>>>>> Iss53: index.html 
Tio signifas la versio en HEAD (via master branĉo, ĉar tio estis kion vi Taksis kiam vi kuris via merge komando) estas la supera parto de tiu bloko (ĉio super la ======= ), dum la versio en via iss53 branĉo aspektas kiel ĉiu en la malsupran parton. Por solvi la konflikton, vi devas aŭ elektu unu flanko aŭ la alia aŭ kunfandi la enhavon mem. Ekzemple, vi povus solvi tiun konflikton anstataŭigante la tutan blokon kun ĉi:
  < Div id = "footer" >
 bonvolu kontakti nin ĉe email.support@github.com
 < / Div > 
Tiu rezolucio havas iom de ĉiu sekcio, kaj la <<<<<<< , ======= kaj >>>>>>> linioj estis tute forigita. Post vi malkomponita ĉiu de tiuj sekcioj en ĉiu konfliktis dosiero, kuri git add sur ĉiu dosiero por marki ĝin kiel solvitaj. Enscenigante la dosiero markas ĝin kiel malkomponita en Git.
Se vi volas uzi grafikan ilon por solvi tiujn problemojn, vi povas kuri git mergetool , kiu pafas supren taŭga vida merge ilo kaj piediras vin tra la konfliktoj:
  $ Git mergetool

This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge
Merging:
index.html

Normal merge conflict for 'index.html':
 {local}: modified file
 {remote}: modified file
Hit return to start merge resolution tool (opendiff): 
Se vi volas uzi merge ilo alia ol la defaŭlta (Git elektis opendiff en tiu kazo ĉar la komando estis prizorgita sur Mac), vi povas vidi ĉiujn apogis iloj listigitaj ĉe la supro post "unu el la sekvaj iloj." Ĝuste tajpi la nomon de la ilo vi preferus uzi.
noto
Se vi bezonas pli progresintaj iloj por solvi malfacila merge konfliktoj, ni kovras pli sur kunfalado en Altnivela kunfalado .
Post vi eliras la merge ilo, Git demandas vin se la merge sukcesis. Se vi diros la skripto kiu estis, ĝi enscenigas la dosieron por marki ĝin kiel decidis por vi. Vi povas kuri git status denove por kontroli ke ĉiuj konfliktoj estis solvitaj:
  $ Git statuso
On branch master
All conflicts fixed but you are still merging.
 (use "git commit" to conclude merge)

Changes to be committed:

 modified: index.html 
Se vi estas feliĉa kun tio, kaj vi kontrolos ke ĉiu kiu havis konfliktojn estis enscenigita, vi povas tajpi git commit fini la merge fari. La commit mesaĝon defaŭlte aspektas io tiamaniere:
 Merge branch 'iss53'

Conflicts:
 index.html
#
 # Aspektas kiel vi povas fari la merge.
 # Se tio ne ĝustas, bonvolu forigi la dosieron
 # .git / MERGE_HEAD
 # Kaj reprovu.


 # Bonvolu eniri la commit mesaĝon for viaj ŝanĝoj.  linioj komencante
 # Per '#' estos ignorata kaj malplenan mesaĝon abortas la commit.
 # La branĉo mastro
 # Ĉiuj konfliktoj fiksita sed vi ankoraŭ kunfalado.
#
 # Ŝanĝoj esti farita:
 # Modifita: index.html
# 
Vi povas modifi tiun mesaĝon kun detaloj pri kiel vi solvis la merge se vi pensas ke estus helpema al aliaj rigardi ĉi merge en la estonteco - kial vi faris kion vi faris, se ĝi ne estas evidenta.

3.1 Git branĉantaj - Branĉoj Unuvorte

3.1 Git branĉantaj - Branĉoj Unuvorte

Preskaŭ ĉiu VCS havas iun formon de branĉantaj subteno. Disbranĉadon signifas vin diverĝas de la ĉefa linio de disvolviĝo kaj daŭre faros laboron sen rompado kun tiu ĉeftendenca. En multaj VCS iloj, ĉi tiu estas iom peniga procezo, ofte postulanta vin krei novan kopion de via fontkodo dosierujo, kiu povas preni longan tempon por grandaj projektoj.
Iuj homoj aludas al Git la disbranĉadon modelo kiel lia "murdisto karakterizaĵo," kaj certe aroj Git dise en la VCS komunumo. Kial tiom speciala? La vojo Git branĉoj estas nekredeble malpeza, farante branĉantaj operacioj preskaŭ instantáneo, kaj ŝaltanta-reen inter branĉoj ĝenerale tiom rapide. Malkiel multaj aliaj VCSs, Git instigas fluoj de laboro ke branĉo kaj kunfandi ofte, eĉ plurfoje en tago. Komprenon kaj majstranta tiu karakterizaĵo donas potencan kaj sola ilo kaj povas tute ŝanĝi la maniero kiun vi disvolvi.

Branĉoj Unuvorte

Por vere kompreni la manieron Git does branĉantaj, ni bezonas preni retropaŝon kaj ekzameni kiel Git stokas liajn datumojn.
Kiel vi eble memoras de ekuzi , Git ne stokas datumojn kiel serio de changesets aŭ diferencoj, sed anstataŭe kiel serion de instantáneas.
Kiam vi faras fari, Git vendejoj oni faras objekto kiu enhavas puntero al la instantánea de la enhavo vi enscenigita. Tiu celo ankaŭ enhavas la aŭtora nomo kaj retpoŝto, la mesaĝo kiu vi tajpas, kaj punteros al la commit aŭ faras ke rekte venis antaux tiu faras (lia patro aŭ gepatroj): nul gepatroj por la komenca farante per unu gepatro por normala fari, kaj multnombraj gepatroj por fari ke rezultoj de merge de du aŭ pli branĉojn.
Bildigi tion, ni supozu ke vi havas dosierujo enhavanta tri dosierojn, kaj vi enscenigi ilin ĉiujn kaj fari. Enscenigante la dosierojn checksums ĉiu (la SHA-1 hash ni menciis en ekuzi ), tendencas ke versio de la dosiero en la Git-deponejo (Git raportas ilin kiel blobs), kaj aldonas ke checksum al la surscenigo areo:
 $ Git aldonu README test.rb LICENCO $ git commit -m 'The initial commit of my project' 
Kiam vi kreas la commit de kuranta git commit , Git checksums ĉiu subdosierujo (en tiu kazo, nur la radiko projekto dosierujo) kaj tendencas tiuj arbo objektoj en la Git-deponejo. Git tiam kreas commit objekto kiu havas la metadatenoj kaj montrilo al la radika projekto arbo do ĝi povas re-krei tiun instantánea kiam devita.
Vian Git-deponejo nun enhavas kvin objektojn: unu blob pri la enhavo de ĉiu de viaj tri dosierojn, unu arbon kiu listigas la enhavon de la dosierujo kaj specifas kiun dosiero nomoj estas stokitaj kiel kiu blobs, kaj oni faras kun la puntero al tiu radika arbo kaj ĉiuj faras pridatumon.

Al fari kaj lia arbo.
Figuro 3-1. A commit kaj lia arbo
Se vi faras iujn ŝanĝojn kaj fari denove la proksima commit tendencas puntero al la commit kiu venis tuj antaŭ ĝi.

Kompromitas kaj iliaj gepatroj.
Figuro 3-2. Kompromitas kaj iliaj gepatroj
Branĉo en Git estas simple malpeza meblo puntero al unu el tiuj interna. La defaŭlta branĉo nomon en Git estas master . Kiel vi komenci farante interna, vi ricevis master branĉo kiu notas al la lasta commit vi faris. Ĉiufoje vi faras, ĝi moviĝas antaŭen aŭtomate.
noto
La "mastro" branĉo en Git ne speciala branĉo. Estas ĝuste kiel ajna alia branĉo. La sola kialo preskaŭ ĉiu deponejo havas estas ke la git init komando kreas defaŭlte kaj plej homoj ne ĝenas ŝanĝi ĝin.

Branĉo kaj lia fari historion.
Figuro 3-3. Branĉo kaj lia commit historio

Kreante Nova Branĉo

Kio okazas se vi kreas novan branĉon? Nu, farante tiel kreas novan montrilon por vi movi ĉirkaŭe. Imagu ke vi kreas novan filion nomita testado. Vi faras tion per la git branch komando:
  $ Git branĉo testado 
Ĉi kreas novan sagon al la sama commit vi aktuale plu.
Du branĉoj montrante en la sama serio de interna.
Figuro 3-4. Du branĉoj montrante en la sama serio de interna
Kiel Git scias kion branĉo vi aktuale sur? Ĝi tenas specialan puntero nomis HEAD . Notu ke ĉi tiu estas multe malsama ol la koncepto de HEAD en aliaj VCSs vi povas uzi por, ekzemple Subversion aŭ CVS. En Git, ĉi estas puntero al la loka branĉo vi aktuale plu. En tiu kazo, vi ankoraŭ sur master . La git branch komandon nur kreis novan branĉon - ne ŝanĝi al tiu branĉo.
HEAD indikante branĉo.
Figuro 3-5. KAPO indikus branĉo
Vi povas facile vidi tion kurante simpla git log komando kiu montras vin kie la branĉo punteros notas. Opcio estas nomita --decorate .
  $ Git log --oneline --decorate
f30ab (HEAD -> master, testing) add feature #32 - ability to add new formats to the central interface
34ac2 Fixed bug #1328 - stack overflow under certain conditions
98ca9 The initial commit of my project 
Vi povas vidi la "majstro" kaj "testado" branĉoj kiuj estas ĝuste tie apud la f30ab fari.

ŝaltanta Branĉoj

Alti al ekzistanta branĉo, vi kuras la git checkout komando. Ni ŝanĝos al la nova testing branĉo:
  $ Git kaso testado 
Ĉi movas HEAD atentigi al la testing branĉo.
HEAD punktoj al la aktuala branĉo.
Figuro 3-6. KAPO punktoj al la aktuala branĉo
Kio estas la signifo de tio? Nu, ni faru alian fari:
  $ Vim test.rb
 $ Git commit -a -m 'made a change' 
La KAPO branĉo movas antaŭen kiam faras estas farita.
Figuro 3-7. La KAPO branĉo movas antaŭen kiam faras estas farita
Tio estas interesa, ĉar nun via testing branĉo movis antaŭen, sed via master branĉo ankoraŭ montras al la commit vi estis kiam vi kuris git checkout alti branĉoj. Ni ŝanĝi reen al la master branĉo:
  $ Git kaso mastro 
HEAD movas kiam checkout.
Figuro 3-8. KAPO movas kiam checkout
Ke komando faris du aferojn. Ĝi kopiis la KAPO montrilon al punkto al la master branĉo, kaj ĝi revenis la dosierojn en via labordosierujon reen al la instantánea ke master punktoj. Ĉi tio ankaŭ signifas la ŝanĝoj kiujn vi faras el tiu punkto antaŭen estos diverĝas de malnova versio de la projekto. Ĝi esence rebobina la laboro vi faris en via testing branĉo do vi povas iri en malsama direkto.
noto

Ŝaltanta branĉoj ŝanĝas dosierojn en via laboranta dosierujo

Estas grave noti, ke kiam vi ŝanĝos branĉoj en Git, dosierojn en via labordosierujon ŝanĝos. Se vi ŝanĝos al malnova branĉo, via labordosierujon estos reverted rigardi kiel ĝi faris la lastan fojon vi faris en tiu branĉo. Se Git ne povas fari ĝin pure, ĝi ne permesas vin ŝanĝi tute.
Ni faru kelkajn ŝanĝojn kaj fari denove:
  $ Vim test.rb
 $ Git commit -a -m 'made other changes' 
Nun via projekto historio diverĝis (vidu Figuro 3-9 ). Vi kreis kaj interŝanĝita al branĉo, faris iun laboron sur ĝi kaj poste interŝanĝita reen al via ĉefa branĉo kaj faris alian laboron. Ambaŭ de tiuj ŝanĝoj estas izolita en apartajn branĉojn: vi povas ŝanĝi tien kaj reen inter la branĉoj kaj kunfandi ilin kune kiam vi estas preta. Kaj vi faris cxion, kio kun simpla branch , checkout , kaj commit ordonojn.
Diferenca historio.
Figuro 3-9. Diferenca historio
Vi povas ankaŭ vidi ĉi facile kun la git log komando. Se vi kuras git log --oneline --decorate --graph --all ĝi presos la historio de via interna, montrante kie via branĉo punteros estas kaj kiom via historio diverĝis.
  $ Git log --oneline --decorate --graph --all
* c2b9e (HEAD, master) made other changes
| * 87ab2 (testing) made a change
|/
* f30ab add feature #32 - ability to add new formats to the
* 34ac2 fixed bug #1328 - stack overflow under certain conditions
* 98ca9 initial commit of my project 
Ĉar branĉo en Git estas en realeco simplan dosieron kiu enhavas la 40 karaktero SHA-1 checksum de la commit notas al, branĉoj estas malkaraj por krei kaj detrui. Kreante novan branĉon kiel rapida kaj simpla kiel skribanta 41 bajtoj al dosiero (40 karakteroj kaj lino).
Tio estas en akra kontrasto al la maniero plej malnovaj VCS iloj branĉo, kiu engaĝas kopiante ĉiuj projekto dosierojn en sekundo dosierujo. Tio povas preni plurajn sekundojn aŭ eĉ minutojn, depende de la grandeco de la projekto, dum kiu en Git la procezo estas ĉiam instantánea. Ankaŭ, ĉar ni gravuras la gepatroj kiam ni faras, trovanta konvenan merge bazo por fandado estas aŭtomate farita por ni kaj estas ĝenerale tre facile fari. Tiuj trajtoj helpos kuraĝigi desarrolladores krei kaj uzi branĉoj ofte.
Vidu kial vi devus tion fari.

2.8 Bazoj de Git - Resumo

2.8 Bazoj de Git - Resumo

Ĉe tiu punkto, vi povas fari ĉiujn bazajn loka Git operacioj - krei aŭ klonado deponejo, farante ŝanĝojn, enscenigante kaj fari tiujn ŝanĝojn, kaj vidanta la historio de ĉiuj ŝanĝoj la deponejo estis tra. Tuj, ni kovros Git murdisto trajto: lia branĉantaj modelo.

2.7 Bazoj de Git - Konsiletoj kaj Ruzoj

2.7 Bazoj de Git - Konsiletoj kaj Ruzoj

Konsiletoj kaj Ruzoj

Antaŭ ni finos tiun ĉapitron sur baza Git, kelkaj malgrandaj konsiletoj kaj ruzoj povas fari vian Git sperti iom pli simpla, facila, aŭ pli familiara. Multaj homoj uzas Git sen uzi iun ajn de ĉi tiuj konsiloj, kaj ni ne rilatas al ili aŭ supozi vi uzis ilin poste en la libro; sed vi supozeble scias kiel fari ilin.

Auto-Finaĵo

Se vi uzas la Bash ŝelo, Git venas kun bela aŭtomata plenigo skripto vi povas ebligi. Elŝuti ĝin rekte de la Git fontkodo ĉe https://github.com/git/git/blob/master/contrib/completion/git-completion.bash. Kopiu tiun dosieron al via hejma dosierujo, kaj aldoni tiun al via .bashrc dosiero:
 source ~/git-completion.bash 
Se vi volas agordi Git aŭtomate havas Bash ŝelo kompletigo por ĉiuj uzantoj, kopii tiun skripton al la /opt/local/etc/bash_completion.d dosierujo sur Mac sistemoj aŭ al la /etc/bash_completion.d/ dosierujo en Linukso sistemoj . Tio estas adresaro de skriptoj kiuj Bash aŭtomate ŝarĝi disponigi ŝelon finaĵoj.
Se vi uzas Windows kun Git Bash, kiu estas la defaŭlta kiam instali Git sur Vindozo kun msysGit, aŭto- kompletiĝo estu preconfigured.
Premu la Tab ŝlosilo kiam vi skribas Git komando, kaj ĝi devus reveni aro de sugestoj por vi elekti de:
 $ git co<tab><tab> commit config 
Tiukaze, tajpante git co kaj tiam premas la Tab ŝlosilo dufoje sugestas fari kaj config. Aldonante m<tab> kompletigas git commit aŭtomate.
Tio funkcias ankaŭ kun ebloj, kiu estas probable pli utila. Ekzemple, se vi uzas la git log komando kaj ne povas memori unu el la ebloj, vi povas ektajpu ĝi kaj premu Tab vidi kio egalas:
 $ git log --s<tab> --shortstat --since= --src-prefix= --stat --summary 
Tio estas sufiĉe bela truko kaj savi vin iu tempo kaj dokumentado legado.

git alias

Git ne konkludi vian komandon se vi tajpas ĝin parte. Se vi ne volas tajpi la tutan tekston de ĉiu de la Git komandojn, vi povas facile agordi alias por ĉiu komando uzante git config . Jen kelkaj ekzemploj vi eble volos starigi:
 $ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global alias.ci commit $ git config --global alias.st status 
Tiu signifas ke, ekzemple, anstataŭ tajpi git commit , vi nur bezonas tajpi git ci . Kiel vi iras pri uzado Git, vi probable uzas aliajn komandojn ofte tiel; en tiu kazo, ne hezitu krei novan kaŝnomoj.
Tiu tekniko povas ankaŭ esti tre utila en kreado komandoj ke vi pensas devus ekzisti. Ekzemple, por korekti la usabilidad problemon vi renkontis kun unstaging dosiero, vi povas aldoni vian propran unstage alias al Git:
 $ git config --global alias.unstage 'reset HEAD --' 
Tio igas la sekvajn du komandojn ekvivalentaj:
 $ git unstage fileA $ git reset HEAD fileA 
Tio ŝajnas iom pli klara. Estas ankaŭ komuna por aldoni last komando, tiel:
 $ git config --global alias.last 'log -1 HEAD' 
Tiel, vi povas vidi la lastan fari facile:
 $ git last commit 66938dae3329c7aebe598c2246a8e6af90d04646 Author: Josh Goebel <dreamer3@example.com> Date: Tue Aug 26 19:48:51 2008 +0800 test for current head Signed-off-by: Scott Chacon <schacon@example.com> 
Kiel vi povas diri, Git simple anstataŭas la nova komando kun kiom vi alias al. Tamen, eble vi volas kuri ekstera komando, anstataŭ Git subcommand. En tiu kazo, vi komencas la komandon kun ! Karaktero. Tio estas utila se vi skribas viajn proprajn ilojn kiuj laboras kun Git-deponejo. Ni povas pruvi per aliasing git visual kuri gitk :
 $ git config --global alias.visual '!gitk'