Git -tak
Werk met Git-takke
In Git is a branch
'n nuwe/afsonderlike weergawe van die hoofbewaarplek.
Kom ons sê jy het 'n groot projek, en jy moet die ontwerp daarop bywerk.
Hoe sou dit werk sonder en met Git:
Sonder Git:
- Maak kopieë van al die relevante lêers om te verhoed dat dit die lewendige weergawe beïnvloed
- Begin met die ontwerp werk en vind dat kode afhang van kode in ander lêers, wat ook verander moet word!
- Maak ook afskrifte van die afhanklike lêers. Maak seker dat elke lêerafhanklikheid die korrekte lêernaam verwys
- NOODGEVAL! Daar is 'n onverwante fout iewers anders in die projek wat so gou moontlik reggemaak moet word!
- Stoor al jou lêers en maak 'n aantekening van die name van die kopieë waaraan jy gewerk het
- Werk aan die onverwante fout en werk die kode op om dit reg te stel
- Gaan terug na die ontwerp en voltooi die werk daar
- Kopieer die kode of hernoem die lêers, sodat die opgedateerde ontwerp op die lewendige weergawe is
- (2 weke later besef jy dat die onverwante fout nie in die nuwe ontwerpweergawe reggestel is nie omdat jy die lêers voor die regstelling gekopieer het)
Met Git:
- Met 'n nuwe tak genaamd new-design, wysig die kode direk sonder om die hooftak te beïnvloed
- NOODGEVAL! Daar is 'n onverwante fout iewers anders in die projek wat so gou moontlik reggemaak moet word!
- Skep 'n nuwe tak van die hoofprojek genaamd klein-fout-fix
- Maak die onverwante fout reg en voeg die klein-fout-fix-tak saam met die hooftak
- Jy gaan terug na die nuwe-ontwerp tak, en voltooi die werk daar
- Voeg die nuwe ontwerptak saam met hoof (word gewaarsku oor die klein foutoplossing wat jy gemis het)
Takke laat jou toe om aan verskillende dele van 'n projek te werk sonder om die hooftak te beïnvloed.
Wanneer die werk voltooi is, kan 'n tak met die hoofprojek saamgevoeg word.
Jy kan selfs tussen takke wissel en aan verskillende projekte werk sonder dat hulle met mekaar inmeng.
Vertakking in Git is baie liggewig en vinnig!
Nuwe Git-tak
Kom voeg 'n paar nuwe kenmerke by ons index.html
bladsy.
Ons werk in ons plaaslike bewaarplek, en ons wil nie die hoofprojek versteur of moontlik vernietig nie.
So ons skep 'n nuwe branch
:
Voorbeeld
git branch hello-world-images
Nou het ons 'n nuwe branch
genaamd " hello-world-images
" geskep
Kom ons bevestig dat ons 'n nuwe geskep het branch
:
Voorbeeld
git branch
hello-world-images
* master
Ons kan die nuwe tak met die naam "hallo-wêreld-beelde" sien, maar die *
langskant
master
spesifiseer dat ons tans op daardie branch
.
checkout
is die opdrag wat gebruik word om 'n branch
. Beweeg ons van die huidige
branch
, na die een wat aan die einde van die opdrag gespesifiseer word:
Voorbeeld
git checkout hello-world-images
Switched to branch 'hello-world-images'
Nou het ons ons huidige werkspasie van die meestertak na die nuwe geskuif
branch
Maak jou gunsteling redigeerder oop en maak 'n paar veranderinge.
Vir hierdie voorbeeld het ons 'n prent (img_hello_world.jpg) by die werklêer gevoeg en 'n reël kode in die
index.html
lêer:
Voorbeeld
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from
Space"
style="width:100%;max-width:960px"></div>
<p>This is the first
file in my new Git Repo.</p>
<p>A new line in our file!</p>
</body>
</html>
Ons het veranderinge aan 'n lêer gemaak en 'n nuwe lêer in die werkgids bygevoeg (dieselfde gids as die main
branch
).
Gaan nou die status van die huidige na branch
:
Voorbeeld
git status
On branch hello-world-images
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
img_hello_world.jpg
no changes added to commit (use "git add" and/or "git commit -a")
So kom ons gaan deur wat hier gebeur:
- Daar is veranderinge aan ons index.html, maar die lêer is nie opgevoer vir
commit
img_hello_world.jpg
is nietracked
Dus moet ons beide lêers by die Staging Environment voeg hiervoor
branch
:
Voorbeeld
git add --all
Deur --all
in plaas van individuele lêername te gebruik, sal alle veranderde (nuwe, gewysigde en uitgevee) lêers verhoog .
Gaan die status
van die
branch
:
Voorbeeld
git status
On branch hello-world-images
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: img_hello_world.jpg
modified: index.html
Ons is gelukkig met ons veranderinge. Ons sal hulle dus verbind tot die
branch
:
Voorbeeld
git commit -m "Added image to Hello World"
[hello-world-images 0312c55] Added image to Hello World
2 files changed, 1 insertion(+)
create mode 100644 img_hello_world.jpg
Nou het ons 'n nuwe branch
, wat anders is as die meester branch
.
Let wel: Deur die -b
opsie op te gebruik checkout
, sal 'n nuwe tak geskep word, en daarna beweeg, as dit nie bestaan nie
Skakel tussen takke
Kom ons kyk nou net hoe vinnig en maklik dit is om met verskillende takke te werk, en hoe goed dit werk.
Ons is tans op die tak hello-world-images
. Ons het 'n prent by hierdie tak gevoeg, so kom ons lys die lêers in die huidige gids:
Voorbeeld
ls
README.md bluestyle.css img_hello_world.jpg index.html
Ons kan die nuwe lêer sien img_hello_world.jpg
, en as ons die HTML-lêer oopmaak, kan ons sien die kode is verander. Alles is soos dit moet wees.
Nou, kom ons kyk wat gebeur wanneer ons van tak verander namaster
Voorbeeld
git checkout master
Switched to branch 'master'
Die nuwe beeld is nie deel van hierdie tak nie. Lys weer die lêers in die huidige gids:
Voorbeeld
ls
README.md bluestyle.css index.html
img_hello_world.jpg
is nie meer daar nie! En as ons die HTML-lêer oopmaak, kan ons sien dat die kode teruggekeer word na wat dit was voor die verandering.
Sien jy hoe maklik dit is om met takke te werk? En hoe dit jou toelaat om aan verskillende dinge te werk?
Noodtak
Stel jou nou voor dat ons nog nie klaar is met hallo-wêreld-beelde nie, maar ons moet 'n fout op meester regmaak.
Ek wil nie direk met meester mors nie, en ek wil nie mors met hallo-wêreld-beelde nie, aangesien dit nog nie gedoen is nie.
Ons skep dus 'n nuwe tak om die noodgeval te hanteer:
Voorbeeld
git checkout -b emergency-fix
Switched to a new branch 'emergency-fix'
Nou het ons 'n nuwe tak van meester geskep, en daarna verander. Ons kan die fout veilig regmaak sonder om die ander takke te steur.
Kom ons maak ons denkbeeldige fout reg:
Voorbeeld
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<p>This is the first
file in my new Git Repo.</p>
<p>This line is here to show how
merging works.</p>
</body>
</html>
Ons het veranderinge in hierdie lêer aangebring, en ons moet daardie veranderinge aan die meestertak kry.
Gaan die status na:
Voorbeeld
git status
On branch emergency-fix
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
verhoog die lêer en pleeg:
Voorbeeld
git add index.html
git commit -m "updated index.html with emergency fix"
[emergency-fix dfa79db] updated index.html with emergency fix
1 file changed, 1 insertion(+), 1 deletion(-)
Nou het ons 'n oplossing gereed vir meester, en ons moet die twee takke saamsmelt.