-
1. Aan die slag
- 1.1 Oor Weergawebeheer
- 1.2 Wat is Git?
- 1.3 Die Opdragreël
- 1.4 Git Installeer
- 1.5 Git klaarmaak vir eerste gebruik
- 1.6 Hulp Verkry
- 1.7 Opsomming
-
2. Git Basics
-
3. Git Branching
-
4. Git on the Server
- 4.1 Die Protokolle (The Protocols)
- 4.2 Git op 'n Bediener kry (Getting Git on a Server)
- 4.3 Jou Publieke SSH-sleutel Genereer (Generating Your SSH Public Key)
- 4.4 Die Bediener Opstel (Setting Up the Server)
- 4.5 Git Daemon
- 4.6 Slim HTTP (Smart HTTP)
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Derdeparty-gasheuroplossings (Third-Party Hosting Solutions)
- 4.10 Summary
-
5. Distributed Git
-
6. GitHub
-
7. Git Tools
- 7.1 Hersieningseleksie (Revision Selection)
- 7.2 Interaktiewe Voorbereiding (Interactive Staging)
- 7.3 Bêre en Skoonmaak (Stashing and Cleaning)
- 7.4 Ondertekening van Jou Werk (Signing Your Work)
- 7.5 Soek (Searching)
- 7.6 Herskryf van Geskiedenis (Rewriting History)
- 7.7 Reset Ontmystifiseer (Reset Demystified)
- 7.8 Gevorderde Saamsmelting (Advanced Merging)
- 7.9 Rerere
- 7.10 Ontfouting met Git (Debugging with Git)
- 7.11 Submodules
- 7.12 Bundeling (Bundling)
- 7.13 Vervang (Replace)
- 7.14 Die Stoor van Aanmeldbewyse (Credential Storage)
- 7.15 Summary
-
8. Customizing Git
-
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
-
10. Git Internals
10.5 Git Internals - Die Refspec (Verwysingspesifikasie)
Die Refspec (Verwysingspesifikasie)
Regdeur hierdie boek het ons eenvoudige karterings (mappings) van afgeleë takke (remote branches) na plaaslike verwysings gebruik, maar dit kan meer kompleks wees. Veronderstel jy het saam met die laaste paar afdelings gevolg en 'n klein plaaslike Git-bewaarplek geskep, en wou nou 'n remote daarby voeg:
$ git remote add origin https://github.com/schacon/simplegit-progit
Die uitvoering van die bogenoemde opdrag voeg 'n afdeling by jou bewaarplek se .git/config-lêer, wat die naam van die remote (origin), die URL van die afgeleë bewaarplek, en die refspec (verwysingspesifikasie) wat vir fetching gebruik moet word, spesifiseer:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/*:refs/remotes/origin/*
Die formaat van die refspec is eerstens 'n opsionele +, gevolg deur <src>:<dst>, waar <src> die patroon vir verwysings aan die afgeleë kant is en <dst> die plek is waar daardie verwysings plaaslik nagespoor sal word.
Die + sê vir Git om die verwysing op te dateer selfs al is dit nie 'n vinnige-voorwaartse (fast-forward) nie.
In die verstekgeval wat outomaties geskryf word deur 'n git remote add origin opdrag, haal (fetches) Git al die verwysings onder refs/heads/ op die bediener af en skryf dit plaaslik na refs/remotes/origin/.
Dus, as daar 'n master-tak op die bediener is, kan jy toegang verkry tot die log van daardie tak plaaslik via enige van die volgende:
$ git log origin/master
$ git log remotes/origin/master
$ git log refs/remotes/origin/master
Hulle is almal ekwivalent, want Git brei elkeen van hulle uit na refs/remotes/origin/master.
As jy eerder wil hê dat Git slegs die master-tak elke keer aftrek (pull down), en nie elke ander tak op die afgeleë bediener nie, kan jy die fetch-reël verander om slegs na daardie tak te verwys:
fetch = +refs/heads/master:refs/remotes/origin/master
Dit is net die verstek refspec vir git fetch vir daardie remote.
As jy net 'n eenmalige fetch wil doen, kan jy die spesifieke refspec ook op die opdragreël spesifiseer.
Om die master-tak op die remote plaaslik af te trek na origin/mymaster, kan jy uitvoer:
$ git fetch origin master:refs/remotes/origin/mymaster
Jy kan ook veelvuldige refspecs spesifiseer. Op die opdragreël kan jy verskeie takke as volg aftrek:
$ git fetch origin master:refs/remotes/origin/mymaster \
topic:refs/remotes/origin/topic
From git@github.com:schacon/simplegit
! [rejected] master -> origin/mymaster (non fast forward)
* [new branch] topic -> origin/topic
In hierdie geval is die aftrek van die master-tak verwerp omdat dit nie as 'n vinnige-voorwaartse verwysing gelys was nie.
Jy kan dit oorskryf deur die + voor die refspec te spesifiseer.
Jy kan ook veelvuldige refspecs vir fetching in jou konfigurasielêer spesifiseer.
As jy altyd die master- en experiment-takke van die origin-remote wil fetch, voeg twee reëls by:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/experiment:refs/remotes/origin/experiment
Sedert Git 2.6.0 kan jy gedeeltelike patrone (partial globs) in die patroon gebruik om by veelvuldige takke te pas, so dit werk:
fetch = +refs/heads/qa*:refs/remotes/origin/qa*
Nog beter, jy kan naamruimtes (namespaces - of gidse) gebruik om dieselfde met meer struktuur te bereik.
As jy 'n QA-span het wat 'n reeks takke push, en jy wil die master-tak en enige van die QA-span se takke kry, maar niks anders nie, kan jy 'n konfigurasie-afdeling soos hierdie gebruik:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/qa/*:refs/remotes/origin/qa/*
As jy 'n komplekse werkvloeiproses het waar 'n QA-span takke push, ontwikkelaars takke push, en integrasiespanne push en saamwerk op afgeleë takke, kan jy hulle maklik op hierdie manier in naamruimtes plaas.
Die Push van Refspecs
Dit is oulik dat jy naamruimte-verwysings op daardie manier kan fetch, maar hoe kry die QA-span hul takke in die eerste plek in 'n qa/ naamruimte?
Jy bereik dit deur refspecs te gebruik om te push.
As die QA-span hul master-tak wil push na qa/master op die afgeleë bediener, kan hulle uitvoer:
$ git push origin master:refs/heads/qa/master
As hulle wil hê Git moet dit outomaties doen elke keer as hulle git push origin uitvoer, kan hulle 'n push-waarde by hul konfigurasielêer voeg:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/*:refs/remotes/origin/*
push = refs/heads/master:refs/heads/qa/master
Weereens, dit sal veroorsaak dat 'n git push origin die plaaslike master-tak by verstek na die afgeleë qa/master-tak push.
|
Note
|
Jy kan nie die refspec gebruik om vanaf een bewaarplek te fetch en na 'n ander een te push nie. Vir 'n voorbeeld van hoe om dit wel te doen, verwys na Hou jou openbare GitHub-bewaarplek op datum. |
Verwydering van Verwysings
Jy kan ook die refspec gebruik om verwysings vanaf die afgeleë bediener te verwyder deur iets soos hierdie uit te voer:
$ git push origin :topic
Omdat die refspec <src>:<dst> is, deur die <src>-gedeelte weg te laat, sê dit basies om die topic-tak op die remote niks te maak nie, wat dit uitvee.
Of jy kan die nuwer sintaksis gebruik (beskikbaar sedert Git v1.7.0):
$ git push origin --delete topic