Git verziókövető rendszer alkalmazása a projektek nyomon Kiadta: IB Controll Kft. Összeállította: Sipos Péter, Nagy Imre, Márta Dániel Dokumentum verzió: v1.5 Utolsó frissítés dátuma: 2014. 11. 10.
Tartalomjegyzék 1. Bevezetés...2 1.1. Dokumentum címe...2 1.2. Rövid tartalom...2 1.3. Használt eszközök...2 2. GIT Version Control System...3 2.1. Bevezetés...3 2.2. Telepítés...3 2.3. Beállítások...4 2.3.1. SSH kulcspár generálás...4 3. Projekt elkezdése...7 3.1. Init új projekt létrehozása...7 3.2. Fork saját példány meglévő projektből...7 3.3. Clone kód beszerzés...8 3.4. Work fejlesztés...8 3.5. Merge beolvasztás kérés...9 4. A.gitignore fájl...10 5. Parancsok listája...11 6. Kapcsolat:...12 6.1. Céginformáció...12 7. Mellékletek...13 7.1. Git fogalmak és konvenciók...14 7.2. Git konfiguráció...15 7.3. Gyakran alkalmazott parancsok...15 1. oldal
1. Bevezetés 1.1. Dokumentum címe Git verziókövető rendszer alkalmazása a projektek nyomon 1.2. Rövid tartalom A dokumentum az IB Controll Kft.-nél alkalmazott GIT verziókövető rendszer használatáról és alkalmazásának módjáról szól. A dokumentum egyes részei megismertetik a GIT VCS rendszert, annak alkalmazását, valamint bemutatja a cégnél alkalmazott konvenciókat a forráskódok változásának. A dokumentum aktuális verziója elérhető az IB Controll Kft. weblapjáról. A dokumentumból a mindenkori legfrissebb verzió a hatályos. 1.3. Használt eszközök Eszköz msysgit PuTTYgen Honlap http://git-scm.com/ http://www.chiark.greenend.org.uk/~sgtatham/putty/ 2. oldal
2. GIT Version Control System 2.1. Bevezetés A szoftverek forráskódjának változásainak nyomon, az egyes szoftververziók kezelésére a cég a Git verzió követő rendszert (VCS 1 ) alkalmazza. 2.2. Telepítés A telepítő fájlok a legismertebb rendszerekre a http://git-scm.com/downloads címen érhetőek el. Letöltés után a megszokott Windows telepítő fogad, mely végig vezet a telepítés menetén. A telepítés alatt az alábbi opciókat ajánlott választani, de ettől tetszés szerint el lehet térni. 1. ábra. Rendszer integráció szintje A Git parancsai csak a Git Bash alkalmazásból lesznek elérhetőek, nem ütközik össze más telepített parancssori alkalmazásokkal. 1 Version Control System, amelyet Linus Torvalds hozott létre a linux kernel verzió. Napjainkban már az egyik legkedveltebb ilyen rendszerré vált. 3. oldal
2. ábra. Fájl konverzió Nincs konverzió a fájlokon letöltés és feltöltés közben. 2.3. Beállítások Telepítés után a Start Git Git Bash útvonalon található a git parancssori alkalmazása. A következő két paranccsal beállíthatjuk, hogy milyen névvel és e-mail címmel lásson a rendszer. git config --global user.name <név> git config --global user.email <email> 2.3.1. SSH kulcspár generálás A Git szerverhez való csatlakozáshoz szükséges egy SSH kulcspár generálása. Ezt Windows rendszeren legegyszerűbben a PuTTYgen program segítségével állíthatjuk elő, mely letölthető az alábbi címről: http://www.chiark.greenend.org.uk/~sgtatham/putty/. 4. oldal
A program kezelése magától értetődő, a Generate gomb megnyomásával elindul a generálás, és a szürke felületen mozgatva az egér kurzort elkészül a kívánt kulcs. A generálás után a Key Comment: mezőbe meg kell adni a webes felületen használt e-mail címet. 3. ábra. Generált SSH kulcs A publikus kulcsra, ami a legfelső szürke mezőben található lesz szükség a webes felületen, a Conversions Export OpenSSH private key menüben pedig a privát kulcs található, mely a saját gépünkön szükséges az azonosításhoz (id_rsa fájl, kiterjesztés nélkül). (Hogy a későbbiekben meg legyen mindkettő a Save private key gombbal ajánlott biztonsági mentést készíteni.) A privát kulcsot az alábbi fájlban kell elhelyezni (id_rsa a fájl neve): %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa pl: c:\users\teszt User\.ssh\id_rsa 5. oldal
A publikus kulcsot a webes felületen, a Profile Settings SSH Keys fül alatt kell megadni. 6. oldal
3. Projekt elkezdése A már létező projekt a Fork Clone Work életutat követi, míg a saját projekt létrehozásakor a Fork lépés kimarad, és az Init Clone végrehajtásával kezdődik a fejlesztés menete. 3.1. Init új projekt létrehozása Ha teljesen új projektet kezdünk, akkor először a webes felületen létre kell hozni hozzá egy Repository -t a New project gomb megnyomásával. Itt értelem szerűen ki kell tölteni a projekt nevét, a láthatóság módosítása nem szükséges, maradhat Private-on. A létrehozása után írja a szükséges parancsokat, amivel a saját gépen levő repo-t fel lehet tölteni az újonnan létrehozott távoli helyre. A parancsokat a projekt mappájában kell kiadni: git init git add. git commit -m 'elso commit' git remote add origin <repo címe> git push -u origin master Az init létrehoz egy alap repo-t a könyvtárban, az add. minden a könyvtárban található állományt hozzáad a megfigyelt fájlokhoz, a commit létrehozza az első commitot míg az utolsó 2 parancs beállítja a távoli repo elérését, és feltölti a fájlokat amik bekerültek az első commitba. 3.2. Fork saját példány meglévő projektből A fejleszteni kívánt projekt oldalára navigálva lehetőség van egy saját példány beszerzésére, melyen bátran lehet módosítani, fejleszteni, és a kívánt módosítások, funkciók megvalósítása után kérvényezni lehet a beolvasztását a szülő projektbe. A saját példány a projekt oldalán a Fork repository gomb megnyomásával hozható létre. 7. oldal
4. ábra. Forkolás Ezután elkészül a saját példány, mely a saját projektek között megtalálható és készen áll a munka elkezdéséhez. 3.3. Clone kód beszerzés Az SSH kulcspár beállítása után a Git Bash parancssor segítségével lehetőség nyílik a Git rendszerben található projektekhez hozzáférni. A webes felületet használva minden projekt főoldalán megtalálható az eléréséhez szükséges cím. 5. ábra. Projekt címe A Git Bash parancssorán belül el kell navigálni egy könyvtárba, ahol a projekt lesz elhelyezve. A projekt letöltése az alábbi parancs kiadásával történik: git clone <projekt címe> Ezután a projekthez tartozó branch-ek között a git checkout <branch név> paranccsal lehet váltani. 3.4. Work fejlesztés A projekt fájlok módosítása után a git commit -a -m <üzenet> paranccsal lehet commitot létrehozni az összes módosított fájlból. Ezek a módosítások a git push parancs kiadásáig csak a saját gépen kerülnek tárolásra, a parancs hatására kerülnek fel a szerverre. A szerverről a más által történt módosítások a git pull paranccsal szerezhetőek be. Érdemes a commitokat módosított fájlonként, logikai egységenként végezni, így a naplóban könnyen elkülöníthető, hogy mikor milyen változás történt. Például: egy projekt fájl kezelésén belül miután elkészült a fájl megnyitása modul felfedezünk egy hibát a fájl írása modulban. Elsőként ajánlott a hiba javításának commitolása, majd utána a megnyitás modul egy külön commitba való elküldése. Így a naplóban jól elkülönül az új modul és a hibajavítás két külön lépése, ezzel módot adva arra, hogy 8. oldal
a hibajavítás átkerüljön az éles rendszerbe, míg a megnyitás modul csak a későbbiek folyamán a tesztelések, fejlesztések után kerüljön át. 3.5. Merge beolvasztás kérés Miután a saját forkolt példányban elkészültek a kívánt módosítások, a következő lépés az eredeti projektbe való visszaolvasztás kérése. Ez a saját projekt adatlapján levő Merge Request New Merge Request gomb használatával érhető el. 6. ábra. Beolvasztás kérése A megjelenő oldal bal oldalán a forrás (a saját példány) a jobb oldalon pedig a cél (az eredeti projekt) megadása, és a branch kiválasztása után elindítható a kérés. A változások átnézése után a projekt vezetője dönti el, hogy az alkalmazott változtatások bekerülnek-e végül a fő projekt forrásába. 9. oldal
4. A.gitignore fájl A.gitignore fájl szerepe, hogy a git bizonyos fájlokat és mappákat figyelmen kívül hagyjon, így nem kerülnek be a commit-ba valamint, push használatakor nem kerülnek fel a szerverre. FONTOS! A gitignore csak azokra a fájlokra vagy mappákra van hatással, amelyek "untracked" státusszal rendelkeznek, vagyis még nem lettek add-olva. Amelyek már add-olva lettek a repóhoz azokra nem érvényesek a.gitignore szabályai. A fájlt a repó gyökérmappájába kell tenni.gitignore néven. Kiterjesztés nem kell, ennyi legyen a teljes fájlnév. Példa.gitignore fájl: Debug/ test.cpp *.ui A fenti példában látható, hogy soronként egy elérési utat vagy fájlnevet kell megadni. Sor magyarázat: 1. A teljes Debug mappát figyelmen kívül hagyja. 2. Pontosan a test.cpp fájl hagyja figyelmen kívül 3. Minden fájlt amely.ui kiterjesztésű figyelmen kívül hagy. A következő példa a Qt projecthez való.gitignore fájl tartalma, amely bemásolható a saját.gitignore fájlba: ui_*.h Makefile* object_script.* *.pro.user.* *.moc *.pro.user *.obj qrc_*.cpp debug/ release/ További leírás: http://git-scm.com/docs/gitignore 10. oldal
5. Parancsok listája A Git és parancsainak megismeréséhez érdemes az alábbi oldalak böngészése: https://www.atlassian.com/git/tutorial http://gitref.org/ http://git-scm.com/book/en/v2 Git Pro könyv ingyen beszerezhető verziója 11. oldal
6. Kapcsolat: 6.1. Céginformáció IB Controll Informatikai Biztonsági és Adatvédelmi Tanácsadó Kft. info@ibcontroll.hu +3676329292 skype: ibcontroll 12. oldal
7. Mellékletek Mellékletjegyzék 7. Mellékletek...13 7.1. Git fogalmak és konvenciók...14 7.2. Git konfiguráció...15 7.3. Gyakran alkalmazott parancsok...15 13. oldal
7.1. Git fogalmak és konvenciók repo Repository, git projekt "könyvtár" master Helyi fő repo origin Távoli repo tag Kiemelt, névvel ellátott commit commit Felvitt módosítások branch Fejlesztői ágak, új funkció, hibajavítás, stb. merge Fejlesztői ágak összefésülése working copy Aktuális branch saját verziója, amin a munka folyik HEAD Aktuális branch verzió HEAD^ Eggyel a HEAD előtti verzió HEAD~2 Kettővel a HEAD előtti verzió ~/.gitconfig / %HOMEDRIVE%%HOMEPATH%\.gitconfig Globális GIT konfigurációs fájl ~/.ssh / %HOMEDRIVE%%HOMEPATH%\.ssh Globális SSH beállítások könyvtára 14. oldal
7.2. Git konfiguráció git config --global user.name <name> Teljes név, ami a commitok mellett megjelenik git config --global user.email <email> E-mail cím, ami a commitok mellett megjelenik git config --global diff.tool <name> Új külső diff eszköz megadása git config --global difftool.<name>.path <"*.exe"> Új külső diff eszköz elérési útjának megadása git config --global merge.tool <name> Új külső merge eszköz megadása git config --global mergetool.<name>.path <"*.exe"> Új külső merge eszköz elérési útjának megadása git config --global mergetool.<name>.trustexitcode false A merge programból való kilépés után rákérdez, hogy sikeres volt-e az összefésülés git config --global mergetool.<name>.keepbackup false Ne készítsen mentést a fájlról 7.3. Gyakran alkalmazott parancsok git init Git repo létrehozás az adott könyvtárban git remote add <name, default:origin> <url> git fetch Távoli repo megadása Távoli repo adatainak lekérése git checkout <branch> git pull A megadott branchre váltás Fájlok letöltése a távoli repoból 15. oldal
git status Változott fájlok listája git add. Egész könyvtár hozzáadása a githez git add <modified file> Csak egy megadott fájl hozzáadása a githez git checkout -- <modified file> Módosított fájl visszaállítása az eredeti verzióra git reset <modified file> Commitra jelölt fájl kijelölésének megszüntetése git commit -m "<message about modifications>" Commitra jelölt fájlok commitolása git commit -a -m "<message about modifications>" Minden változott és követett fájl commitolása git commit -a -m --amend "<message about modifications>" Minden változott és követett fájl commitolása az előző commitba git push Commitok feltöltése a távoli repoba git log --oneline Naplók megjelenítése 1-1 sorba rendezve git revert <commit> Visszatérés az adott commitra git diff <commit> <file> Fájl összehasonlítása a megadott commithoz git difftool <commit> <file> Fájl összehasonlítása a megadott commithoz, külső alkalmazás használatával git diff --staged Az eredeti fájl és a commitra jelölt összehasonlítása 16. oldal
git checkout <branch> Branch váltás git rebase <branch> Aktuális branch szintre hozása a megadott branchez 17. oldal