Muokataan sivua Git
Siirry navigaatioon
Siirry hakuun
Kumoaminen voidaan suorittaa. Varmista alla olevasta vertailusta, että haluat saada aikaan tämän lopputuloksen, ja sen jälkeen julkaise alla näkyvät muutokset.
Nykyinen versio | Oma tekstisi | ||
Rivi 3: | Rivi 3: | ||
| kuva=[[Kuva:Git-logo.svg]] | | kuva=[[Kuva:Git-logo.svg]] | ||
| kuvateksti= | | kuvateksti= | ||
| lisenssi=[[GPL]] | | lisenssi=[[GPL]] | ||
| käyttöliittymä=teksti | | käyttöliittymä=teksti | ||
| kotisivu=[ | | kotisivu=[http://git-scm.com/ git-scm.com]}} | ||
Git on hajautettu [[versionhallintajärjestelmä]], jonka kehityksen aloitti [[Linus Torvalds]] Linuxin [[ydin|ytimen]] kehitystä varten. Se korvasi ytimen kehityksessä suljetun lähdekoodin BitKeeperin. | |||
}} | |||
== Perusperiaate == | == Perusperiaate == | ||
Rivi 16: | Rivi 13: | ||
Gitissä eri kehityshaarojen käyttäminen (esimerkiksi luominen, vertailu ja yhdistäminen) on helppoa ja ideana on, että isommista muutoksista luodaan oma kehityshaaransa. Kehityshaaroja voidaan muokata toisistaan riippumatta, ja lopulta esimerkiksi vakaasta kehityshaarasta haarautetussa epävakaassa kehityshaarassa tehty työ voidaan liittää takaisin vakaaseen haaraan työn valmistuttua. | Gitissä eri kehityshaarojen käyttäminen (esimerkiksi luominen, vertailu ja yhdistäminen) on helppoa ja ideana on, että isommista muutoksista luodaan oma kehityshaaransa. Kehityshaaroja voidaan muokata toisistaan riippumatta, ja lopulta esimerkiksi vakaasta kehityshaarasta haarautetussa epävakaassa kehityshaarassa tehty työ voidaan liittää takaisin vakaaseen haaraan työn valmistuttua. | ||
Kehitystyö tapahtuu käytännössä viemällä muutoksia versionhallintaan eli tekemällä ns. '' | Kehitystyö tapahtuu käytännössä viemällä muutoksia versionhallintaan eli tekemällä ns. ''committeja'' (engl. ''commit'', vakiintunutta suomennosta ei ole). Gitissä jokaiselle commitille luodaan yksilöllinen [[SHA|SHA-1]]-tunniste jolla siihen voidaan viitata. Tunnisteen avulla varmistetaan myös se, ettei tietokantaa voida vahingossa tai tahallaan korruptoida. | ||
== Käyttö == | == Käyttö == | ||
Rivi 23: | Rivi 20: | ||
Luodaan ensin muutama tiedosto projektia varten: | Luodaan ensin muutama tiedosto projektia varten: | ||
hello.c ([[C]]-kielinen lähdekoodi, ohjelma tulostaa ruudulle yhden rivin tekstiä, kääntyy komennolla <tt>[[gcc]] hello.c -o hello</tt>): | hello.c ([[C]]-kielinen lähdekoodi, ohjelma tulostaa ruudulle yhden rivin tekstiä, kääntyy komennolla <tt>[[gcc]] hello.c -o hello</tt>): | ||
#include <stdio.h> | |||
#include <stdio.h> | void main() { | ||
void main() { | printf("Hei, maailma\n"); | ||
} | |||
} | |||
README: | README: | ||
Esimerkkiprojekti, jonka avulla opetellaan Gitin käyttöä | Esimerkkiprojekti, jonka avulla opetellaan Gitin käyttöä | ||
Rivi 60: | Rivi 55: | ||
$ git config --global user.name "Oma Nimi" | $ git config --global user.name "Oma Nimi" | ||
$ git config --global user.email oma@sähköposti.osoite | $ git config --global user.email oma@sähköposti.osoite | ||
=== Tiedostojen muokkaaminen === | === Tiedostojen muokkaaminen === | ||
Nyt kun ensimmäinen commit on tehty voidaan alkaa kehittämään projektia jolloin näemme, miten Gitin kanssa toimitaan tiedostojen muuttuessa. Tiedosto <tt>hello.c</tt> ei ole standardin mukainen eikä se [[kääntäminen|käänny]] suoritettavaksi ohjelmaksi. Korjataan tämä ongelma muuttamalla tiedosto <tt>hello.c</tt> muotoon | Nyt kun ensimmäinen commit on tehty voidaan alkaa kehittämään projektia jolloin näemme, miten Gitin kanssa toimitaan tiedostojen muuttuessa. Tiedosto <tt>hello.c</tt> ei ole standardin mukainen eikä se [[kääntäminen|käänny]] suoritettavaksi ohjelmaksi. Korjataan tämä ongelma muuttamalla tiedosto muotoon | ||
<tt>hello.c</tt> | |||
#include <stdio.h> | |||
int main() { | |||
printf("Hei, maailma\n"); | |||
return 0; | |||
} | |||
Tässä on siis muutettu toisella rivillä esiintyvä <tt>void</tt> muotoon <tt>int</tt> ja lisätty toiseksiviimeinen rivi <tt>return 0;</tt>. | |||
Nyt tehdyt, vielä committoimattomat muutokset nähdään komennolla | |||
Nyt tehdyt, vielä | |||
$ git status | $ git status | ||
# On branch master | # On branch master | ||
Rivi 107: | Rivi 95: | ||
Ensimmäinen commit | Ensimmäinen commit | ||
Lokissa näkyy jokaiselle commitille yksilöllinen tunnistenumero, commitin tekijä, kellonaika jolloin commit tehtiin ja | 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 | $ git log -p | ||
-- (osa tulosteesta poistettu) | -- (osa tulosteesta poistettu) | ||
Rivi 197: | Rivi 185: | ||
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 | 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... | Merge: 040c39d... b2626d8... | ||
Numero- ja kirjainyhdistelmät viittaavat tiettyyn | Numero- ja kirjainyhdistelmät viittaavat tiettyyn committeihin, joiden välillä liitos tapahtui (commitin tunnistenumerosta ilmoitetaan vain alkuosa jos se riittää yksilöimään commitin). | ||
Kun luomallamme kehityshaaralla ei enää ole käyttöä, se voidaan poistaa komennolla | Kun luomallamme kehityshaaralla ei enää ole käyttöä, se voidaan poistaa komennolla | ||
Rivi 206: | Rivi 194: | ||
=== Tagit ja tunnisteet === | === Tagit ja tunnisteet === | ||
Kuten aiemmin huomattiin, jokaiseen | Kuten aiemmin huomattiin, jokaiseen committiin viitataan yksilöllisellä mystisellä kirjain- ja numeroyhdistelmällä. Tämän lisäksi Git mahdollistaa tiettyjen committien nimeämisen selväkielisillä tageilla. Esimerkiksi nimetään alussa ensimmäisen korjauksen jälkeen tehty commit nimelle "v1.0": | ||
$ git tag v1.0 770194dd647d7f | $ git tag v1.0 770194dd647d7f | ||
Tässä 770194dd647d7f on alkuosa kyseiseen muokkauksen tunniste (ja luultavasti eroaa omassa järjestelmässäsi). Aina, kun Gitissä viitataan tiettyyn muokkaukseen sen tunnisteella | Tässä 770194dd647d7f on alkuosa kyseiseen muokkauksen tunniste (ja luultavasti eroaa omassa järjestelmässäsi). Aina, kun Gitissä viitataan tiettyyn muokkaukseen sen tunnisteella riittää kirjoittaa tunnisteen alkuosaa niin pitkälle, että se yksilöi tietyn tunnistenumeron versiohistoriasta. | ||
Tagitetaan vastaavasti uusin | Tagitetaan vastaavasti uusin committi versiolle 2.0: | ||
$ git tag v2.0 | $ git tag v2.0 | ||
Kaikki määritetyt tagit saa listattua komennolla | Kaikki määritetyt tagit saa listattua komennolla | ||
Rivi 226: | Rivi 214: | ||
näyttäisi tagilla v1.0 merkityn tilan jälkeen tapahtuneet muutokset tagiin v2.0 asti. | näyttäisi tagilla v1.0 merkityn tilan jälkeen tapahtuneet muutokset tagiin v2.0 asti. | ||
Edellä esiteltiin eräänlainen tagi HEAD joka viittaa nykyiseen | Edellä esiteltiin eräänlainen tagi HEAD joka viittaa nykyiseen committiin. Lisäksi voidaan käyttää merkintää ^, joka viittaa edeltäneeseen committiin (esim. HEAD^ tai v1.0^), esimerkiksi | ||
$ git diff v1.0^ v1.0 | $ git diff v1.0^ v1.0 | ||
näyttäisi erot commitin v1.0 ja sitä edeltäneen commitin välillä. Vastaavasti kaksi | näyttäisi erot commitin v1.0 ja sitä edeltäneen commitin välillä. Vastaavasti kaksi committia taaksepäin on ^^ jne. Yleisemmin voidaan käyttää merkintää ~numero, esimerkiksi HEAD~4 viittaa 4 committia taaksepäin. Liitetyille (''merge'') commiteille löytyy useampia edeltäjiä, jolloin niitä merkitään esimerkiksi HEAD^1 ja HEAD^2. | ||
Yleisesti kaikissa tapauksissa, joissa Gitille annettaisiin commitin tunniste, voidaan käyttää myös kyseiselle commitille merkattua tagia. Katsotaan esimerkiksi millaiseen | Yleisesti kaikissa tapauksissa, joissa Gitille annettaisiin commitin tunniste, voidaan käyttää myös kyseiselle commitille merkattua tagia. Katsotaan esimerkiksi millaiseen committiin asetettiin tagi v2.0: | ||
$ git show v2.0 | $ git show v2.0 | ||
Tietyn tagin merkkaamasta commitista voidaan aloittaa myös uusi haara: | Tietyn tagin merkkaamasta commitista voidaan aloittaa myös uusi haara: | ||
$ git branch vakaa v1.0 | |||
loisi uuden haaran nimellä vakaa siten, että haarasta löytyisi vain ne commitit, jotka on tehty tähän committiin mennessä. | |||
Kehitsyhaaran sisällä voidaan palata tiettyyn vanhaan committiin komennolla <tt>git reset</tt>: | |||
$ git reset --hard v1.0 | $ git reset --hard v1.0 | ||
palaisi valitussa haarassa tagin v1.0 osoittamaan | palaisi valitussa haarassa tagin v1.0 osoittamaan committiin. Tämä komento poistaa kaikki tehdyt commitit viitatun commitin jälkeen ja lisäksi paikallisesti tehdyt, versionhallintaan siirtämättömät muokkaukset. Tätä ei pidä käyttää julkisesti käytössä olevassa Git-varastossa. Sen sijaan on käytettävä komentoa <tt>git revert</tt>. | ||
=== git merge ja git rebase === | === git merge ja git rebase === | ||
=== | === Git yhteistyövälineenä === | ||
Versionhallinnasta on eniten iloa tilanteessa, jossa useampi kehittäjä toimii saman projektin kimpussa. Oletetaan nyt, että äskeinen kehitystyö tapahtui hakemistossa <tt>/home/osku/projekti</tt>. Nyt toinen samalla koneella oleva käyttäjä haluaa osallistua kehitystyöhön. Tällöin hän voi hakea versionhallinnasta kopion itselleen komennolla <tt>git clone</tt>: | Versionhallinnasta on eniten iloa tilanteessa, jossa useampi kehittäjä toimii saman projektin kimpussa. Oletetaan nyt, että äskeinen kehitystyö tapahtui hakemistossa <tt>/home/osku/projekti</tt>. Nyt toinen samalla koneella oleva käyttäjä haluaa osallistua kehitystyöhön. Tällöin hän voi hakea versionhallinnasta kopion itselleen komennolla <tt>git clone</tt>: | ||
$ git clone /home/osku/projekti hello | $ git clone /home/osku/projekti hello | ||
Komento kopioi hakemistosta <tt>/home/osku/projekti</tt> löytyvän projektin Git-versionhallinnasta kopion hakemistoon <tt>hello</tt> | Komento kopioi hakemistosta <tt>/home/osku/projekti</tt> löytyvän projektin Git-versionhallinnasta kopion hakemistoon <tt>hello</tt>. | ||
Kun toinen käyttäjä (tässä Elisa) on tehnyt haluamiaan muutoksia projektiin (commitoinut ne versionhallintaan hakemistossa <tt>/home/elisa/hello</tt>) hän voi ilmoittaa siitä Oskulle, joka voi hakea muutokset omaan kehityshaaraansa komennolla | Kun toinen käyttäjä (tässä Elisa) on tehnyt haluamiaan muutoksia projektiin (commitoinut ne versionhallintaan hakemistossa <tt>/home/elisa/hello</tt>) hän voi ilmoittaa siitä Oskulle, joka voi hakea muutokset omaan kehityshaaraansa komennolla | ||
Rivi 253: | Rivi 240: | ||
Komento hakee parametrina annetusta hakemistosta löytyvästä versionhallinnasta <tt>master</tt>-kehityshaaran sisällön ja liittää sen aktiivisena olevaan kehityshaaraan. Jos paikalliseen kehityshaaraan ja etähaaraan (eli Elisan kehityshaaraan) välillä on päällekkäisiä muokkauksia jätetään ristiriidat käyttäjän ratkaistavaksi (kuten edellä käsiteltäessä kehityshaarojen yhdistämistä). Lopuksi <tt>git pull</tt> tekee muutoksista commitin nykyiseen haaraan. | Komento hakee parametrina annetusta hakemistosta löytyvästä versionhallinnasta <tt>master</tt>-kehityshaaran sisällön ja liittää sen aktiivisena olevaan kehityshaaraan. Jos paikalliseen kehityshaaraan ja etähaaraan (eli Elisan kehityshaaraan) välillä on päällekkäisiä muokkauksia jätetään ristiriidat käyttäjän ratkaistavaksi (kuten edellä käsiteltäessä kehityshaarojen yhdistämistä). Lopuksi <tt>git pull</tt> tekee muutoksista commitin nykyiseen haaraan. | ||
== Gitk == | |||
=== | |||
==Aiheesta muualla== | ==Aiheesta muualla== | ||
* [http://git-scm.com/ Gitin kotisivu] | *[http://git-scm.com/ Gitin kotisivu] | ||
* [http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html Git tutorial] | *[http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html Git tutorial] | ||
* [[wikipedia:Git (software)|Git englanninkielisessä Wikipediassa]] | *[[wikipedia:Git (software)|Git englanninkielisessä Wikipediassa]] | ||
[[Luokka:Kehitystyökalut]] | [[Luokka:Kehitystyökalut]] |