Mivel a Git parancssorra lett tervezve, ezért nem tudunk megmenekülni a parancssori használattól. A Visual Studio telepítője segítségével telepíthetjük a parancssoros változatot, valamint a Visual Studio Team explorer-je támogatja a Git-et is.
Érdemes megjegyezni, hogy bár a Team Explorer Git támogatása folyamatosan fejlődik, még mindig akadnak olyan műveletek, amelyek csak parancssorból érhetőek el, így a fejezet hátralévő része a parancssori használattal foglalkozik.
A Team Explorer a korábbi verziókban (2015 előtt) csak Visual Studio Team Services-t támogatott. Ez a Microsoft verziókezelő rendszere volt és kézenfekvőnek tűnt, hogy a GIT támogatást is a Team Explorer-be építsék be. Viszont a 2019-es Visual Studio kapcsán a Microsoft is belátta, hogy a két rendszer nagyon különböző. Éppen ezért a 2019-es Visual Studio-ban a Git eszközök egy külön menüt kaptak.
Git repository-k online tárolására több lehetőségünk is van. Például ott a GitHub (https://github.com/), amelyhez beépített kliens is van a Visual Studio-ban, ha kértük a telepítőt, hogy tegye fel. Illetve használható még a BitBucket (https://bitbucket.org/) és a GitLab (https://about.gitlab.com/).
Az, hogy melyik megoldást érdemes választanunk az nagymértékben függ a projektünktől. A szolgáltatók eltérő feltételekkel eltérő szolgáltatásokat nyújtanak, ezért szolgáltató választás előtt érdemes mérlegelni, hogy mire van pontosan szükségünk.
Az alábbi parancssori Git Leírás a Márton Balázs által írt Git gyorstalpaló (http://www.maths.bris.ac.uk/~mb13434/git/index.html) feldolgozásának eredményeképpen jött létre. Köszönöm, hogy megengedte a műve feldolgozását.
Alapismeretek
A Git parancssort a Start menüből a Git Bash menüpont segítségével tudjuk elérni. Ez elindít egy Bash parancsértelmezőt, amely előkonfigurálva lett Git támogatására.
Mivel a Bash alapvetően egy Unix rendszerek számára kidolgozott parancsértelmező, ezért elfelejthetjük a meghajtókat, mivel Linux alatt nincsenek meghajtók. Minden a / (root) mappából nyílik további mappaként.
Git Bash-en belül, ha a D: meghajtóra szeretnénk átnavigálni, akkor a következő parancsot kell kiadnunk:
cd /d
A Git használata előtt be kell állítanunk a változások rögzítésére szolgáló e-mail címet és nevet. Ez akkor fontos igazán, ha a repository-t tárolni szeretnénk egy távoli szerveren (pl. GitHub vagy BitBucket) is. Ekkor ugyanazt az e-mail címet és nevet adjuk meg, amivel regisztráltunk a távoli szerverre. A beállítások módosításához használható parancsok:
git config --global user.name "Saját Nevünk"
git config --global user.email "saját@email.címünk"
Ezután a következő lépés az, hogy létrehozunk egy Git repository-t. Ezt többféleképpen is megtehetjük:
git init
git init --bare
git init [mappa]
git init --bare [mappa]
Ha nem adunk meg mappát, akkor az aktuális mappán belül jön létre a git repositroy. A –-bare kapcsolót akkor érdemes használni, ha nem csak helyileg tárolt repository-t szeretnénk létrehozni. Ebben az esetben a –-bare kapcsoló a mappa már esetlegesen létező tartalmát nem veszi figyelembe. Ajánlás, hogy a --bare kapcsoló használatakor a mappa név .git taggal végződjön.
A repository létrejötte után a mappába elmentjük a fájlokat, amelyeket verziókezelni szeretnénk. A verzió rögzítése két lépésből áll. Először meg kell adni a fájlok listáját, amelyeket szeretnénk bevonni a kezelés alá. Ezt az alábbi parancsok egyikének segítségével tehetjük meg:
git add fájl1 fájl2 fájlN
git add .
Ha a . nevet használjuk ténylegesen fájlnevek helyett, akkor minden fájlt a verziókezelő figyelmébe ajánlunk, amely még nem lenne bevonva a kezelés alá. Ez igen kényelmes megoldás a legtöbb esetben, viszont előfordulhat olyan, hogy bizonyos kiterjesztésű, vagy nevű fájlokat nem szeretnénk verziókezelni.
Ebben az esetben létre kell hozni a repository mappában egy .gitignore nevezetű szöveges fájlt. Ebben a szöveges fájlban megadhatjuk azon fájlok nevét és/vagy kiterjesztéseket, amelyeket sosem szeretnénk verziókezelni. Az ezen listában megadott mintákra illeszkedő fájlok sosem kerülnek letárolásra, ha a git add . parancsot futtatjuk.
A .gitignore fájlok összeállítása leginkább fejlesztőkörnyezet specifikus feladat. A legtöbb fejlesztőkörnyezethez találunk előre megírt sablont a https://github.com/github/gitignore címen elérhető projektben.
.NET parancssor segítségével Visual Studio és .NET specifikus gitignore fájlt az alábbi parancs segítségével tudunk létrehozni:
dotnet new gitignore
A fájlok hozzáadása után következhet a tárolás. Ez az alábbi parancsok egyikével tehető meg:
git commit
git commit -m „változások leírása”
A paraméterek nélküli commit használata akkor ajánlott, ha hosszabb leírást szeretnénk megadni a változtatásokról. Itt érdemes megjegyeznem, hogy a Git alapbeállításként a ViM szövegszerkesztőt használja, amely komoly előképzettséget igényel. Cserébe viszont a leggyorsabban használható szerkesztő.
Ha nem szeretnénk megismerkedni a ViM használatával, akkor természetesen lehetőségünk van átállítani az alapértelmezett szerkesztőt. Ehhez az alábbi parancsot kell kiadni:
git config --global core.editor nano
A nano egy parancssoros szövegszerkesztő, ami kicsivel felhasználóbarátabb, mint a ViM. Amennyiben mégis ViM-et használunk, akkor a legfontosabb, hogy megtanuljunk a ViM-ből kilépni. A kilépés első lépése, hogy megnyomjuk az ESC gombot, ami „normál” módra vált. Innen a : lenyomásával jutunk command módba. Itt a q beírásával és enter segítségével nyugtázva tudunk kilépni.
Ha nem szeretnénk menteni, akkor a q! parancs használható. Ha menteni szeretnénk akkor a wq parancs használható.
A commit után tudjuk a helyileg tárolt változatunkat szinkronizálni egy távoli szerverrel. Ehhez első körben fel kell venni a távoli szervert:
git remote add origin [projektcím]
A projektcím egy .git végződésű fájl lesz. Hozzáadás után a helyi tárolót szinkronizálni az alábbi parancs segítségével tudjuk:
git push
A push közben meg kell adnunk a távoli szerveren a felhasználónevünket és jelszavunkat is. Amennyiben ezt nem szeretnénk minden egyes alkalommal, akkor a távoli szerver felvételekor vagy klónozáskor a projektcímbe az alábbi módon építhető be a felhasználónév és jelszó:
felhasználó:jelszó@projektcím
A jelszó opcionális rész és tárolása ilyen módon nagyon nem ajánlott biztonsági szempontból. A jelszót és az azonosítást SSH kulcsok segítségével tudjuk automatizálni. Az ssh kulcsok beállításáról egy jó leírás a https://help.github.com/articles/generating-an-ssh-key/ címen található.
Ha nem szeretnénk SSH-t alkalmazni, akkor a legtöbb Git rendszer (Pl. Github, Gitlab) lehetőséget biztosít HTTPS alapú token azonosításra, ami egy idő után lejár és nem derül ki belőle egy konkrét felhasználó neve és jelszava sem.
Push után a szerveren is tárolódnak a változások. Egy tetszőleges gépen egy meglévő projektet a saját gépünkre a clone parancs segítségével tudjuk leszedni:
git clone projektcím
Tételezzük fel, hogy klónoztunk egy repository-t, viszont azt valaki a távolban módosította. Ebben az esetben a pull parancs segítségével tudjuk leszedni a helyi változathoz képest az újdonságokat:
git pull
Értelemszerűen a parancsot a repository mappában kell kiadni. A pull parancs valójában két dolgot csinál. Leszedi a változásokat és alkalmazza azokat egy merge segítségével. Ha csak a változásokra vagyunk kíváncsiak (mert még dolgozunk a kódon és nem akarunk mergelni még), akkor az alábbi parancsot használhatjuk:
git fetch
Szintén a repository mappából indítandó parancs. A szerveren tárolt állapotot letölti, viszont nem egyesíti a helyi és a távoli változatokat. A távoli változat külön ágon lesz elérhető, amire origin/master névvel tudunk hivatkozni (ha a master branch-en vagyunk). A helyi és a szerveren tárolt változatok közötti különbség az alábbi parancs segítségével tekinthető meg:
git diff master origin/master
Ha azt szeretnénk, hogy a korábbi fetch eredménye ugyanolyan szintre emelkedjen, mint ha egy pull parancsot futtattunk volna, akkor az alábbi parancsot kell kiadni (ha a master branch-en vagyunk):
git merge master origin/master