Versionhallinta - Harjoitukset 2/2 - Git

Nämä harjoitukset jakautuvat kahteen osaan: etukäteen ja paikalla tehtäviin. Pahoittelemme edelleen "branchi repositoryn trunkista" -kieltä.

Etukäteen

Työkalut tutuiksi

Tee etukäteen nämä Linux-näppäilyharjoitukset ja yksinkertainen Gitin kokeilu, niin harjoituksissa pääset suoraan oikeisiin tehtäviin.

  1. Varmista, että pääset kirjautumaan koneelle db.cs.helsinki.fi
  2. Jos kyllästyttää naputtaa jatkuvasti salasanaa, niin tee itsellesi SSH-avain
  3. Luo repository käyttäen git init -komentoa. Palvelimelle tehtävän jaetun repon tapauksessa käytetään yleensä git init --bare -komentoa, niin repolle ei luoda työkansiota.
  4. Ota siitä itsellesi klooni samalle koneelle, käyttäen repon hakemistopolkua.
  5. Aseta ympäristömuuttuja $EDITOR haluamaksesi editoriksi.
  6. Alussa repo on aivan tyhjä. Lisää sinne jokin tiedosto ja kommitoi master-branchiin ensimmäinen versio.
  7. Ota repositorystä klooni jollekkin toiselle koneelle, kuten melkki.cs.helsinki.fi tai melkinpaasi.cs.helsinki.fi käyttäen ssh://käyttäjätunnus@kohdekone/koko/polku/repository -URLia
  8. Jatka kokeilua, kunnes tunnet olosi kotoisaksi

Tutustu tehtäviin

Katsasta tehtävät etukäteen ja kokeile onnistuuko diffin, branchin, mergen, rebasen ym. tarvittavien komentojen käyttö jo ennen harjoituksia.

Paikanpäällä

Muodostellaan 3 hengen pienryhmiä ja tehdään tehtävät.

Luo repository ja hae muiden ryhmäläisten luomista repositoryistä oma klooni

Harjoitellaan vielä, että repositoryjen luonti ja tiedosto-oikeudet menevät varmasti oikein.

  1. Luo Git-repository kotihakemistoosi ja anna siihen luku-, kirjoitus- ja suoritusoikeudet ryhmälle rekursiivisesti. (chmod -R g+rwx)
  2. Hae muiden ryhmäläisten repositoryistä itsellesi omalle koneellesi klooni SSH:n yli.
  3. Lisätkää repositoryyn yksi tiedosto ja kokeilkaa, että saatte sen myös pushattua keskusrepoon sekä pullattua muille.
  4. Valmis!

Commit-conflict: Kissan venytys

On annettu "shortcat"

	    /\___/\
	   /       \
	  |  #    # |
	  \     @   |
	   \   _|_ /
	   /       \______
	  / _______ ___   \
	  |_____   \   \__/
	   |    \__/
	   |       |
	   /        \
	  /   ____   \
	  |  /    \  |
	  | |      | |
	 /  |      |  \
	 \__/      \__/
	
		Shortcat.
	
  1. Luokaa ryhmälle yhteinen repository kurssin repositoryn luontikoneella
  2. Hakekaa repositorystä klooni
  3. Yksi ryhmän jäsen laittaa Shortcatin repositoryyn tiedostoon shortcat.txt
  4. Jokainen ryhmän jäsen pidentää oman paikallisen reponsa Shortcattiä keskikohdasta yhdellä |etunimi| -rivillä, pidennyksen jälkeen ryhmän jäsen pushaa commitin yhteiseen repositoryyn. Tehkää tämä samanaikaisesti siten, että committeja tulee jokaiselle viisi kappaletta. Shortcatin pituudeksi tulee tällöin [ryhmän jäsenien lukumäärä] x 5. Selvittäkää ristiriidat venytyksen edetessä. Kokeilkaa käyttää sekä mergeä että rebasea.
  5. Käyttäkää git blame -komentoa shortcat.txt -tiedostoon ja tallettakaa sen tulostus repositoryyn
  6. Uudelleennimetkää tiedosto longcat.txt:ksi, sillä shortcat on nyt looooooooooooong. Katsokaa git status:lla, että havaitseeko Git uudelleennimeyksen.

Branching, merge, tag, peruminen

  1. Jokainen ryhmän jäsen tekee master -branchista oman etunimensä mukaan nimetyn branchin.
  2. Muokatkaa oman branchinne Longcatin päätä ja jalkoja. Commit kun on valmista.
  3. Pushatkaa oma branchinne keskusrepoon ja varmistakaa, että muut ryhmäläiset näkevät sen.
  4. Mergetkää oma valmis branchinne master -branchiin.
  5. Tehkää master -branchista tag valmis-[etunimi]
  6. Perukaa master -branchin muutokset ja palauttakaa siihen alkuperäinen versio (git reset --hard tai git checkout, git branch -f).

Ignore

  1. Kääntäkää juurihakemistossa oleva Longcat.java
  2. Lisätkää hakemistoon .gitignore -tiedosto, jotta *.class -tiedostot pysyvät poissa versionhallinnasta.

Muita toimintoja

Näitä tehdään jos ehditään ja/tai tuntuu, että osaa aikaisemmat jo riittävän hyvin. Näitä ei tarvitse osata harjoitustyössä.

  1. Käyttäkää git rebase -i -komentoa: yhdistäkää, pilkokaa ja uudelleenjärjestelkää committeja.
  2. Palauttakaa aiempia committeja git reflog -komennon avulla.
  3. Kokeilkaa git stash -komentoa.
  4. Käyttäkää Gitillä jotain SVN-repositoryä (esim. viime harjoitusten jäljiltä).
  5. Käyttäkää patcheja: git format-patch, git am, myös git apply

Hooks

Vähän edistyneemmille...

  1. Laittakaa omaan repositoryyn hook, joka lähettää sähköpostia pushin jälkeen.
  2. Laittakaa omaan repositoryyn hook, jolla saatte päivitettyä sisällön nettiin (public_html alle siis).