Warning: Creating default object from empty value in /chroot/home/zerotohe/zerotohero.hu/html/wp-content/themes/salient/nectar/redux-framework/ReduxCore/inc/class.redux_filesystem.php on line 29
gitignore | zeroToHero

Sziasztok!

Tovább folytatva a Git megismerését, ma nézzük meg, mire jó a gitignore!

Egy kisebb fejlesztés esetén is nehézkessé válhat a fájlok listájának áttekintése, abból a szemszögből, hogy melyek azok amelyeket szeretnénk a repository-ban tárolni, és melyek azok, amelyeket nem. Ha pedig nagyobb projekten dolgozunk, akkor elkerülhetetlen valamilyen módon ezek megszűrése.

Felmerülhet a kérdés, hogy a kódbázisnak melyek azok a részei, amiket nem szeretnénk verziókezelni? Tipikusan a bináris kódokat nem szeretnénk, vagy olyan fájlokat, amelyeket generáltatunk az alkalmazással, és minden fejlesztőnél más-más a fájl tartalma az aktuális környezetnek megfelelően, stb. Természetesen ezekre lehet olyan workaroundokat találni, amelyekkel ezek kivédhetőek, de az plusz munkával jár… és valljuk be, az egyszerűség, és az automatizáció hívei vagyunk, így a legegyszerűbb megoldást válasszuk ezen problémának a megoldására is: a .gitignore fájlt.

Ez egy szöveges fájl, amelyet a

git init

parancs futtatásánál nem hozunk létre, így hozzuk létre kézzel:

touch .gitignore

Ebben a fájlban elérési útvonalakat lehet megadni, mégpedig azoknak a fájloknak az eléréseit, amelyeket nem szeretnénk hozzáadni a repositoryhoz. Ezen fájlokat meg lehet nevezni teljes eléréssel:

src/resources/private.xml

vagy

private.xml

vagy pedig wildcard-ok segítségével:

src/resources/private.*

vagy

*.xml

az utóbbi esetben a .gitignore fájl útvonalától kezdve az összes xml fájl ignorálva lesz. Azért nem árt odafigyelni, hogy mit írunk a fájlba, ugyanis volt már olyan eset, amikor csapatmunkában az egyik fejlesztő rosszul állította be magának a gitignore fájlt, és az egyik taskjához tartozó fájl nem jelent meg a commitban. Ilyenkor ismét az a helyzet van, hogy akinél nem működik a kód, panaszkodik, a fejlesztője pedig megmutatja, hogy „Hát az én gépemen nagyszerűen fut, valamit elcsesztél…”. Miután meggyőződtek róla, mindenki jól csinált mindent, elkezdődik a debug különböző módokon, hogy miért nem megy a kód. Az ilyen és hasonló eseteket elkerülendően van egy parancs, amely segítségével megnézhetjük az ignorálandó fájlok listáját:

git ls-files . –ignored –exclude-standard –others

De hogyan is ignorálja a git ezeket?

Ha ignoráltunk egy fájlt a .gitignore-ban:

$ ls -a
. .. .git .gitignore pom.xml src target
$ cat .gitignore
App.java
$

és ezek után szeretnénk hozzáadni a repository-hoz, akkor az alábbi üzenetet kapjuk:

The following paths are ignored by one of your .gitignore files:
src/main/java/hu/zerotohero/App.java
Use -f if you really want to add them.
fatal: no files added

Tehát nem engedi hozzáadni, és itt szépen meg is jegyzi nekünk a Git, hogyha mégis szeretnénk hozzáadni, akkor a -f kapcsolóval meg tudjuk tenni, de enélkül nem fogja engedi.

Ha beállítottuk a .gitignore fájlt, és az mindent tartalmaz, amit nem szeretnénk commitolni, akkor nincs más dolgunk mint:

git add –all
git commit -m „#1 Skeleton létrehozása.”

és az összes fájlt, amelyet nem szűrt ki a .gitignore alapján, azt be fogjuk commitolni.

Megjegyzésként, érdemes a .gitignore fájlt is a repository-ban kezelni, így elég egy embernek összeállítani a tartalmát, viszont érdemes mindenkinek átnéznie a csapatban, mert ha egyvalakinek rossz, akkor mindenkinek rossz :)

Melyek azok a beállítások, amelyeket érdemes megtenni?

Általában a .gitignore fájlt a .git mappával egy szintre szoktuk tenni, de ez teljesen tetszőleges, és függ a projekt struktúrájától is. Java fejlesztés során az alábbiakat biztosan nem szeretnénk a repository-ban tárolni:

**target # az egész target mappa, az összes létező helyen
*.jar
*.war
*.ear
hs_err_pid* # virtuális gép crash logjai
#Eclipse esetén érdemes még az alábbiakat:
bin/
.settings/
.loadpath
.metadata

Egy szó mint száz, ha használjuk ezt az egyszerű feature-t, akkor nagyon megkönnyítjük az életünket.