Git
Ik heb vandaag de Git tutorial van Wouter J gelezen en ik heb Git ook geïntalleerd op mijn pc nu. (Windows)
Ik vroeg me alleen af hoe het ziet met het synchroon houden van je bestanden, want dat is toch ook het idee als je er met meerdere mensen aan werkt?
En een repo met daarop de bestanden, wordt die gewoon op de servers van Git geplaatst?
Kan iemand mij dit duidelijk maken?
Roel
Als je achteraf alle bestanden hebt gecomit, moet je dit pushen naar je git repo. Dit kan ook via Netbeans (zo hoef je niet met consoles te werken).
Ik ben geen expert maar ik geloof dat je dan als je bijvoorbeeld een update maakt op een andere PC je repo moet pullen naar je PC, zo worden al je bestanden uit je repo gepusht naar je computer zodat alles weer synchroom is.
Iedereen in een project heeft een basis remote repo op de server. Die is van iedereen dus hetzelfde. Jan gaat vervolgens aan de slag met het maken van een database klasse en Piet met het maken van een routing klasse.
Jan maakt allereerst een nieuwe branch aan en maakt daarin een config klasse voor zijn database en commit die (alles nog lokaal). Vervolgens begint hij aan de database klasse. De dag loopt ten einde en hij pushed zijn lokale repo nu naar de server.
Piet heeft ondertussen een routing klasse gemaakt, ook in een nieuwe branch, en ook een daarbij behorende config klasse. Ook hij pushed het naar de server.
Aan het eind van de week zijn Jan en Piet beide klaar met hun werk. Vervolgens fetched Piet de remote repo naar zijn lokale repo. Hij heeft daar nu 3 branches: master; create_db_class; create_routing. Vervolgens merged hij (samenvoegen) zijn create_routing branch met de master. Hij heeft nu nog maar 2 branches.
Dan merged hij de create_db_class branch met de master. Alleen dan ziet hij dat er een conflict is: 2 config klassen. Hij kijkt naar het bestand, pakt wat goede dingen van hem en wat dingen van Jan en zorgt zo voor een algemene config klasse.
Vervolgens heeft Piet nu weer 1 mooie branch de master met daarin het werk van Jan en zijn werk. Die pushed hij weer naar de server en het resultaat is dat we nu al een libary hebben met een routing en database klasse. Tijd voor volgende week, wanneer ze weer verder kunnen.
Dat is in verhaallijn opgeschreven hoe GIT werkt. In code vorm:
Jan
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Kopieer de remote repo (op de server) naar een lokale repo
git clone git://mywork.com/project
# maken een nieuwe branch
git checkout -b create_db_class
# ... we gaan aan het werkt
# en committen de veranderde dingen
git add src/Config/Config.php
git commit -m "Config class created"
# enz.
git commit -m "Database class is ready"
# en pushen het naar de server
git push origin
git clone git://mywork.com/project
# maken een nieuwe branch
git checkout -b create_db_class
# ... we gaan aan het werkt
# en committen de veranderde dingen
git add src/Config/Config.php
git commit -m "Config class created"
# enz.
git commit -m "Database class is ready"
# en pushen het naar de server
git push origin
Piet
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Kopieer de remote repo (op de server) naar een lokale repo
git clone git://mywork.com/project
# maken een nieuwe branch
git checkout -b create_routing
# ... we gaan aan het werkt
# en committen de veranderde dingen
git add src/Config/Config.php
git commit -m "Config class created"
# enz.
git commit -m "Routing is now ready"
# en pushe het naar de server
git push origin
git clone git://mywork.com/project
# maken een nieuwe branch
git checkout -b create_routing
# ... we gaan aan het werkt
# en committen de veranderde dingen
git add src/Config/Config.php
git commit -m "Config class created"
# enz.
git commit -m "Routing is now ready"
# en pushe het naar de server
git push origin
Piet (merging)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# we halen de code van de server naar de lokale repo
git fetch origin
# en mergen het in de lokale repo
git merge origin/create_db_class
# we gaan naar de master branch
git checkout master
# en mergen de create_routing branch
git merge create_routing
# geen problemen
# nu mergen we create_db_class
git merge create_db_class
# problemen, 2 config klassen
# we wijzigen de config klasse en committen die
git commit -m "Config class merged"
# we hebben nu 1 branch, verwijder de overige
git branch -d create_db_class
git branch -d create_routing
# en pushen het naar de server repo
git push origin
git fetch origin
# en mergen het in de lokale repo
git merge origin/create_db_class
# we gaan naar de master branch
git checkout master
# en mergen de create_routing branch
git merge create_routing
# geen problemen
# nu mergen we create_db_class
git merge create_db_class
# problemen, 2 config klassen
# we wijzigen de config klasse en committen die
git commit -m "Config class merged"
# we hebben nu 1 branch, verwijder de overige
git branch -d create_db_class
git branch -d create_routing
# en pushen het naar de server repo
git push origin
Als laatst de vraag "En een repo met daarop de bestanden, wordt die gewoon op de servers van Git geplaatst?" wat bedoel je met de git server? Je zult je eigen server moeten gebruiken of iets als github.
Gewijzigd op 19/07/2012 23:12:25 door Wouter J
als jij aan een project werkt dan heb je een git repo gemaakt etc ( ik ga er van uit dat je dat kan ) dan heb je een branch genaamd master. deze gebruik je meestal om de inhoud ervan naar je ( website o.i.d ) te deployen.
alles wat in een master branch staat houd in dat het werkt en dat het gebruikt kan worden.
verder kan je zelf ook branches maken en hierin de "master" branch in clonen dat wil zeggen dat je dezelfde inhoud dan ook op die zelfgemaakte branch hebt. bijvoorbeeld dev branch ( development )
elke keer als je werkt kan je op de dev branch een commit uitvoeren. dat wil zeggen dat git een momentopname maakt van hoe de bestanden er uitzien en wat er in staat etc..
wanneer je iets hebt wat werkt kan je dit pushen van je local repo naar de server repo maar dan moet je natuurlijk wel zeggen naar welke branch je deze wilt pushen dus dan krijg je iets als: git push origin dev
dit betekent dat alles wat gecommit hebt naar de server gepusht wordt. wanneer je een heel applicatie hebt of iets hebt waarvan je denkt dit kan in de publicatie dan kan je naar je master branch gaan ( git checkout master ) hierna kan je de volgende commando loslaten git merge dev waardoor de master branch synct met de inhoud van dev.
dit is even simpel uitgelegd. meestal gebruiken mensen veel meer branches om meerdere dingen tegelijk te kunnen doen bijvoorbeeld als jij een bug snel op moet lossen kan je de master branch clonen als bijv hotfix en de bug oplossen en vervolgens mergen met de master branch. de dev branch zal niet tussenbeide komen en alles wat je dus op die branch gedaan hebt blijft ook in die branch tot het moment dat je deze merged met master.
ik hoop dat ik het een beetje goed uitgelegd heb.. ik zou hier even kijken heb je veel uitleg met plaatjes enzo en als je iets nog niet snapt dan hoor ik het wel :)
http://git-scm.com/
p.s. heb je al een account op www.github.com?
Phoei, Roel heeft wat te lezen...
Probeer ook eens http://try.github.com al leer je daar alleen omgaan met GIT command en niet met hoe je werkt met repo's en meerdere mensen.
Gewijzigd op 19/07/2012 23:16:40 door Wouter J
Toevoeging op 19/07/2012 23:24:42:
- Raoul - op 19/07/2012 23:05:01:
Als je een goede IDE gebruikt zoals Netbeans zie je automatisch of een bestand is ge-update en kun je hem dan ook committen. Bij het committen moet je een beschrijving geven van je update aan het bestand.
Als je achteraf alle bestanden hebt gecomit, moet je dit pushen naar je git repo. Dit kan ook via Netbeans (zo hoef je niet met consoles te werken).
Ik ben geen expert maar ik geloof dat je dan als je bijvoorbeeld een update maakt op een andere PC je repo moet pullen naar je PC, zo worden al je bestanden uit je repo gepusht naar je computer zodat alles weer synchroom is.
Als je achteraf alle bestanden hebt gecomit, moet je dit pushen naar je git repo. Dit kan ook via Netbeans (zo hoef je niet met consoles te werken).
Ik ben geen expert maar ik geloof dat je dan als je bijvoorbeeld een update maakt op een andere PC je repo moet pullen naar je PC, zo worden al je bestanden uit je repo gepusht naar je computer zodat alles weer synchroom is.
dit is wel makkelijk inderdaad! en je hebt tegenwoordig zelfs programmatjes die je helpen waarmee je met 1 druk op de knop al een repo hebt gecloned en wel.. maar zeg nou zelf, het is toch veel cooler als je hiervoor je shell gebruikt? :D
BitBucket is een gelijksoortige dienst waar je gratis private repo's kan aanmaken met een maximum tot 5 personen.
Even ook nog een tipje, bij GitHub moet je betalen als je een private repo wilt. @Reshad, natuurlijk shell/cmd is veel cooler. CLI php apps (composer, phpdoc, phpunit) zijn ook veel cooler! En natuurlijk is een shell editor (vim) nog veel cooler! Lang leven shell!
Gewijzigd op 19/07/2012 23:34:01 door Wouter J
+1 !!
Ik vind het bijvoorbeeld toffer om dit te doen via NetBeans.
dat is dus het verschil Raoul.. netbeans doet het dan voor je. jij drukt maar een paar knopjes in! :P overigens gebruik ik zelf voor grote projecten ook netbeans en ik doe het altijd via de shell.
Reshad F op 20/07/2012 09:44:37:
dat is dus het verschil Raoul.. netbeans doet het dan voor je. jij drukt maar een paar knopjes in! :P overigens gebruik ik zelf voor grote projecten ook netbeans en ik doe het altijd via de shell.
Je moet natuurlijk ook wel weten wat die knopjes betekenen, dus je hebt ook nog steeds wel kennis van Git nodig :-)
Verder raad ik voor Git ook de tutorial van Kees aan, zo heb ik het namelijk ook geleerd.