4 175
muokkausta
(alkua) |
(lisää peruskamaa) |
||
Rivi 67: | Rivi 67: | ||
joka commitoi kaikkiin tiedostoihin tehdyt muutokset. | joka commitoi kaikkiin tiedostoihin tehdyt muutokset. | ||
=== Muokkaushistoria === | |||
Muiden versionhallintaohjelmien tapaan Git mahdollistaa projektin etenemisen tutkimisen helposti monilla eri tavoilla. Jokaisesta commitista tehdään merkintä lokiin, joka näkyy komennolla | |||
$ git log | |||
commit 770194dd647d7f7ab11a96cfd47ea6cd42c19f3a | |||
Author: Osku Ohjelmoija <osku@linux.fi> | |||
Date: Fri Oct 23 23:51:59 2009 +0300 | |||
Korjaus | |||
commit 9c5cc04010c91cf560e097c69e5c53f6a51d30ef | |||
Author: Osku Ohjelmoija <osku@linux.fi> | |||
Date: Fri Oct 23 23:39:56 2009 +0300 | |||
Ensimmäinen commit | |||
Lokissa näkyy jokaiselle commitille yksilöllinen tunnistenumero, commitin tekijä, kellonaika jolloin commit tehtiin ja committiin liittyvä kommentti. Jos loki on pitkä sitä voi selata nuolinäppäimillä tai näppäimillä j ja k ja selaamistilasta voi siirtyä takaisin komentoriville painamalla q-näppäintä. Käyttämällä valitsinta <tt>-p</tt> Git näyttää myös versioiden välillä tapahtuneet [[diff|muutokset]]: | |||
$ git log -p | |||
-- (osa tulosteesta poistettu) | |||
diff --git a/hello.c b/hello.c | |||
index d1788b8..f4e5959 100644 | |||
--- a/hello.c | |||
+++ b/hello.c | |||
@@ -1,4 +1,5 @@ | |||
#include <stdio.h> | |||
-void main() { | |||
+int main() { | |||
printf("Hei, maailma\n"); | |||
+ return 0; | |||
} | |||
Muutokset näytetään käyttäen [[diff]]-komennosta tuttua syntaksia. | |||
Jokaisesta commitista on nähtävissä myös tarkempi yhteenveto komennolla | |||
$ git log --stat --summary | |||
=== Haarat === | |||
Haarat (engl. ''branch'') ovat erillisinä kehityshaaroina eteneviä kehityspolkuja jotka lähtevät yhdestä tietystä commitista. Esimerkiksi ohjelmaa kehitettäessä voidaan luoda kokeellinen haara jossa tehdään radikaaleja muutoksia samalla kun ohjelman pääasialliseen kehityshaaraan tehdään maltillisempia muutoksia. Kun uudet muutokset on saatu onnistuneesti tehtyä valmiiksi kokeellisessa haarassa voidaan ne liittää (engl. ''merge'') päähaaraan (tai johonkin toiseen haaraan). Git mahdollistaa eri haarojen monipuolisen käytön ja niitä voi huoletta käyttää runsaastikin. | |||
Luodaan esimerkkiohjelmastamme uusi kokeellinen kehityshaara nimeltään testailu: | |||
$ git branch testailu | |||
Katsotaan tämän jälkeen, mitä haaroja on käytettävissä: | |||
$ git branch | |||
* master | |||
testailu | |||
Tähdellä (*) on merkattu tällä hetkellä aktiivisena oleva kehityshaara. <tt>master</tt>-haara luodaan aina automaattisesti oletuksena. | |||
Siirrytään nyt uuteen kehityshaaraan komennolla | |||
$ git checkout testailu | |||
Switched to branch "testailu" | |||
Tehdään tässä nyt radikaaleja muutoksia ohjelmaamme: | |||
<tt>hello.c</tt>: | |||
<pre> | |||
#include <stdio.h> | |||
int main() { | |||
printf("Päivää, maailma!!!!!111111\n"); | |||
printf("Vierailepa osoitteessa http://linux.fi\n"); | |||
return 0; | |||
} | |||
<pre> | |||
README: | |||
Upea esimerkkiohjelma | |||
v. 2.0! | |||
Ja tehdään muutoksista uusi commit: | |||
$ git commit -a -m "Ohjelman versio 2.0" | |||
Huomaa, että tässä on käytetty valitsinta <tt>-a</tt> jolloin erillistä <tt>git add</tt> -komentoa ei tarvita. Lisäksi valitsimella <tt>-m</tt> asetetaan kommentti jolloin sitä ei kysytä erikseen. | |||
Siirrytään seuraavaksi takaisin <tt>master</tt>-haaraan: | |||
$ git checkout master | |||
Switched to branch "master" | |||
ja tehdään ohjelmaan pieni muutos tiedostoon <tt>hello.c</tt>. Huomaa, että <tt>git checkout</tt> latasi versionhallinnasta <tt>master</tt>-haaran sisällön joten äsken tekemämme muokkaukset eivät näy tiedostossa. Muutetaan tiedoston printf-rivi muotoon | |||
printf("Terve maailma\n"); | |||
ja commitoidaan muutokset | |||
$ git commit -a -m "Hienosäädetään tekstiä" | |||
Ajatellaan nyt, että ohjelmamme on kehittynyt siihen pisteeseen että on aika ottaa kokeellisessa <tt>testailu</tt>-haarassa tehdyt muokkaukset käyttöön. Niiden käyttöönotto onnistuu nyt helposti, sillä Git osaa yhdistää kaksi kehityshaaraa. Yhdistetään <tt>testailu</tt>-haara <tt>master</tt>-haaraan ajamalla komento | |||
$ git merge testailu | |||
Auto-merged hello.c | |||
CONFLICT (content): Merge conflict in hello.c | |||
Automatic merge failed; fix conflicts and then commit the result. | |||
joka yhdistää <tt>testailu</tt>-haaran aktiivisena olevaan haaraan (nyt <tt>master</tt>). Git osaa automaattisesti muuttaa <tt>README</tt>-tiedoston sisällön sillä siihen ei ole tehty muokkauksia <tt>testailu</tt>-haaran luomisen jälkeen. Sen sijaan molemmissa haaroissa on muokattu <tt>hello.c</tt>-tiedostoa samasta kohdasta, joten Git ei osaa päätellä, miten muokkaukset tulisi yhdistää. Tästä syystä automaattinen yhdistäminen epäonnistuu ja yhdistäminen jätetään käyttäjän harteille. | |||
Yhdistäminen tapahtuu muokkaamalla nyt käsin tiedostoa <tt>hello.c</tt> josta löytyy rivit | |||
<pre> | |||
<<<<<<< HEAD:hello.c | |||
printf("Terve maailma\n"); | |||
======= | |||
printf("Päivää, maailma!!!!!111111\n"); | |||
printf("Vierailepa osoitteessa http://linux.fi\n"); | |||
>>>>>>> testailu:hello.c | |||
</pre> | |||
Git on siis merkinnyt allekkain ristiriidassa olevan kohdan rivit ensin aktiivisesta haarasta ja tämän jälkeen liitettävästä haarasta. Toteamme, että <tt>teistailu</tt>-haaran ensimmäinen printf-rivi on järkyttävä, joten poistamme sen. Sen sijaan jätämme tietysti jäljelle linux.fin mainoksen. Lisäksi tiedostosta poistetaan käsin Gitin lisäämät ohjausrivit (<tt>=========</tt> yms.), jolloin tiedoston tämä osuus jää muotoon | |||
<pre> | |||
printf("Terve maailma\n"); | |||
printf("Vierailepa osoitteessa http://linux.fi\n"); | |||
</pre> | |||
Siirretään muutokset versionhallintaan: | |||
$ git commit -a -m "Yhdistetty kokeellisesta haarasta versio 2.0" | |||
Created commit 82fef9e: Yhdistetty kokeellisesta haarasta versio 2.0 | |||
Nyt komennolla <tt>git log</tt> nähdään, että on kyseisen commitin yhteydessä on tapahtunut kahden haaran liittäminen, sillä commitin tunnistenumeron alapuolelle ilmestyy rivi | |||
Merge: 040c39d... b2626d8... | |||
Numero- ja kirjainyhdistelmät viittaavat tiettyyn committeihin, joiden välillä liitos tapahtui (commitin tunnistenumerosta ilmoitetaan vain alkuosa jos se riittää yksilöimään commitin). | |||
==Aiheesta muualla== | ==Aiheesta muualla== |