Szél Péter

A Git nem véletlenül vált a de facto verziókezelő rendszerré, rugalmasságának köszönhetően olyan eszközt ad a szoftverfejlesztő kezébe, amelyről mindig is álmodott. Már ha tudja használni, hiszen legnagyobb hátránya mindig is az volt, hogy nem igazán nevezhető barátinak a parancssori felülete.
Nem meglepő tehát, hogy az utóbbi időben a legtöbb fejlesztés a Gitben abba az irányba mutat, hogy ezt az interfészt gatyába rázza, átlagos gondolkodású fejlesztők számára is logikussá tegye, a kezdők számára pedig nagyobb biztonságot nyújtson az alapértelmezett beállításokkal.
Az alábbiakban a számomra legfontosabb változásokat emelem ki a Git 2.0-ból.

Értem, hogy push, de mit és hova?

A push utasítás teljes alakja valahogy így néz ki:

git push origin master:master

Ami annyit tesz, hogy "kérlek told ki a lokaláis master branch változásait az origin nevű repository master nevű branchére". Ilyen formában ez iszonyatosan hosszú, minden egyes alkalommal leírni számomra kényelmetlen. Mivel a lokális master branch amúgy is követi (trackeli) az origin/master branchet, így részemről az volna logikus, hogy ha csak simán kiadom a git push utasítást további argumentumok nélkül, akkor a default működés a fenti leírt kimenetelt eredményezi. A jó hír az, hogy git 2.0-tól már ez a default működés, mostantól a push művelet sokkal biztonságosabbnak számít alapértelmezett beállítások mellett. Korábban ez az utasítás az összes branchet, amely passzolt egy remote branchhez, frissítette, elég komoly fejfájást okozva.

Kihúzni a pull méregfogát

Valószínűleg hallottad már azt az ökölszabályt, hogy a git pull utasítás használata kerülendő, hiszen nem mindig biztonságos művelet. Elég, ha a kollégád valamilyen force-olt frissítést csinált (pl. resetelte a legutolsó commitját revert helyett), máris megvan a baj.
Szerencsére a Git 2.0-ban bevezetésre került egy új konfigurációs változó, a pull.ff. Ha beállítod, hogy

[pull]
    ff = only

a pull művelet csak akkor fog sikerrel járni, ha a remote branch legfrissebb commitja közvetlen leszármazottja a lokális branch legfrissebb commitjának, azaz a lokális branchünk egyszerűen fast-forwardolható.
Én kifejezetten javaslom a beállítás használatát, hiszen ebben az esetben nyugodtan használható a git pull. A legtöbb esetben lefog futni hibátlanul, viszont két esetben nem fog működni:

  • Valamilyen lokális módosítás történt a branchen, ezt a célnak megfelelően vagy merge-lni vagy rebase-elni kell.
  • Force-olt update volt a remote branchen, ezesetben külön vizsgálat szükséges annak kiderítésére, hogy mi is volt a célja ennek a frissítésnek (legegyszerűbb felvenni a kapcsolatot a commit elkövetőjével és érdemes figyelmeztetni minden kollégát).

A Git add most már remove is

Ez elég nagy butaságnak hangzik első hallásra, de egyáltalán nem az. A git add utasítás az index frissítésére szolgál. Ha kiadod a git add . utasítást, minden új és modosított fájlt hozzá fogja adni az indexhez. Ha viszont egy fájlt kitöröltél, akkor eddig az előbbi utasítás nem törölte ki az indexből, külön ki kellett adnod a git rm file utasítást, vagy a git add -all . utasítást kellett használni.

Ez a működés logikátlan, hiszen ha az új fájlt létrehozását és a meglévő fájlok modosítást lekezeli alapértelmezetten, akkor miért nem kezeli a törlést? Szerencsére a Git 2.0-tól kezdve már a törlés is alapértelmezett művelete lesz az add utasításnak, így megint egyel előrébb jutottunk a racionálisabb git interfészhez.