Ez a rész a git clean parancs részletes tárgyalására összpontosít. A Git clean bizonyos mértékig egy ‘visszavonás’ parancs. A Git clean más parancsok, például a git reset és a git checkout kiegészítőjének tekinthető. Míg ezek a többi parancs a korábban a Git követési indexéhez hozzáadott fájlokra hat, addig a git clean parancs a még nem követett fájlokra hat. A nem követett fájlok olyan fájlok, amelyek a repó munkakönyvtárában jöttek létre, de még nem kerültek hozzá a repository követési indexéhez a git add paranccsal. A követett és nem követett fájlok közötti különbség jobb bemutatásához tekintsük a következő parancssori példát:

 $ mkdir git_clean_test $ cd git_clean_test/ $ git init . Initialized empty Git repository in /Users/kev/code/git_clean_test/.git/ $ echo "tracked" > ./tracked_file $ git add ./tracked_file $ echo "untracked" > ./untracked_file $ mkdir ./untracked_dir && touch ./untracked_dir/file $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached ..." to unstage) new file: tracked_file Untracked files: (use "git add ..." to include in what will be committed) untracked_dir/ untracked_file

A példa egy új Git-tárat hoz létre a git_clean_test könyvtárban. Ezután egy tracked_file létrehozására kerül sor, amely hozzáadódik a Git indexhez, emellett létrejön egy untracked_file és egy untracked_dir. A példa ezután meghívja a git status-t, amely megjeleníti a Git belső állapotát jelző kimenetet a nyomon követett és nem nyomon követett változásokról. Ha a tár ebben az állapotban van, akkor végre tudjuk hajtani a git clean parancsot, hogy bemutassuk a rendeltetését.

 $ git clean fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean

Ezzel a ponttal az alapértelmezett git clean parancs végrehajtása végzetes hibát eredményezhet. A fenti példa szemlélteti, hogy ez hogyan nézhet ki. Alapértelmezés szerint a Git globálisan úgy van beállítva, hogy a git clean indításához a “force” opciót kell átadni. Ez egy fontos biztonsági mechanizmus. Véglegesen végrehajtva a git clean nem vonható vissza. Teljes végrehajtásakor a git clean kemény törlést hajt végre a fájlrendszerben, hasonlóan a parancssori rm segédprogram végrehajtásához. A futtatás előtt győződjön meg róla, hogy valóban törölni akarja a nem követett fájlokat.

Általános opciók és használat

Az alapértelmezett git clean viselkedés és a figyelmeztetések korábbi magyarázata alapján a következő tartalom a git clean különböző felhasználási eseteit és a működésükhöz szükséges kísérő parancssori opciókat mutatja be.

-n

A -n opció a git clean “száraz futtatását” végzi el. Ez megmutatja, hogy mely fájlokat fogja eltávolítani, anélkül, hogy ténylegesen eltávolítaná őket. A legjobb gyakorlat, hogy először mindig a git clean száraz futtatását végezzük el. Ezt az opciót a korábban létrehozott demó repóban mutathatjuk be.

 $ git clean -n Would remove untracked_file

A kimenetből kiderül, hogy a untracked_file a git clean parancs végrehajtásakor eltávolításra kerül. Vegyük észre, hogy a untracked_dir itt nem szerepel a kimeneten. Alapértelmezés szerint a git clean nem fog rekurzívan működni a könyvtárakon. Ez egy újabb biztonsági mechanizmus a véletlen végleges törlés megakadályozására.

 -f or --force

A force opció az aktuális könyvtárból a még nem követett fájlok tényleges törlését kezdeményezi. A kényszerítés kötelező, kivéve, ha a clean.requireForce konfigurációs opciót false-ra állítottuk. Ez nem távolítja el a .gitignore által megadott nem követett mappákat vagy fájlokat. Futtassunk most egy éles git clean parancsot a példarepónkban.

 $ git clean -f Removing untracked_file

A parancs ki fogja adni az eltávolított fájlokat. Itt láthatjuk, hogy a untracked_file eltávolításra került. A git status végrehajtása ezen a ponton, vagy egy ls végrehajtása megmutatja, hogy a untracked_file törlődött, és sehol sem található. Alapértelmezés szerint a git clean -f az aktuális könyvtár összes nem követett fájljára hat. Ezen kívül a -f opcióval átadható egy olyan érték, amely egy adott fájlt fog eltávolítani.

 git clean -f -d include directories

A -d opció megmondja a git clean-nek, hogy a nem követett könyvtárakat is el akarja távolítani, alapértelmezés szerint a könyvtárakat figyelmen kívül hagyja. A -d opciót hozzáadhatjuk a korábbi példáinkhoz:

 $ git clean -dn Would remove untracked_dir/ $ git clean -df Removing untracked_dir/

Ezzel a -dn kombinációval egy “szárazfuttatást” hajtottunk végre, amely a untracked_dir eltávolítandó állományt adja ki. Ezután végrehajtunk egy kényszerített tisztítást, és azt a kimenetet kapjuk, hogy a untracked_dir eltávolításra került.

 -x force removal of ignored files

Egy gyakori szoftverkiadási minta, hogy van egy olyan build vagy disztribúciós könyvtár, amely nincs bejegyezve a tárolók követési indexébe. A build könyvtár efemer build artefaktumokat tartalmaz, amelyeket a commit forráskódból generálnak. Ez a build könyvtár általában hozzáadódik a repositories .gitignore fájlhoz. Kényelmes lehet ezt a könyvtárat más, nem követett fájlokkal is megtisztítani. A -x opció megmondja a git clean-nek, hogy az összes figyelmen kívül hagyott fájlt is vegye fel. A korábbi git clean meghívásokhoz hasonlóan a legjobb gyakorlat, ha a végleges törlés előtt először egy “száraz futtatást” hajtunk végre. A -x opció az összes figyelmen kívül hagyott fájlra hat, nem csak a projektépítés-specifikus fájlokra. Ez olyan nem kívánt dolgokat jelenthet, mint a ./.idea IDE konfigurációs fájlok.

 git clean -xf 

A -x opcióhoz hasonlóan a -d opciót is át lehet adni és más opciókkal össze lehet állítani. Ez a példa egy olyan -f kombinációt mutat be, amely eltávolítja a nem követett fájlokat az aktuális könyvtárból, valamint minden olyan fájlt, amelyet a Git általában figyelmen kívül hagy.

Interaktív mód vagy git clean interactive

Az eddig bemutatott ad-hoc parancssori végrehajtás mellett a git clean rendelkezik egy “interaktív” móddal, amelyet a -i opció átadásával indíthatunk el. Nézzük meg újra a dokumentum bevezetőjében szereplő példarepót. Ebben a kezdeti állapotban elindítunk egy interaktív, tiszta munkamenetet.

 $ git clean -di Would remove the following items: untracked_dir/ untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now>

Az interaktív munkamenetet a -d opcióval kezdeményeztük, így a mi untracked_dir-unkra is hatni fog. Az interaktív üzemmódban megjelenik egy What now> prompt, amely egy parancsot kér a nem követett fájlokra való alkalmazáshoz. Maguk a parancsok meglehetősen maguktól értetődőek. Röviden megnézzük őket véletlenszerű sorrendben, kezdve a 6: help paranccsal. A 6. parancs kiválasztásával a többi parancsot tovább magyarázzuk:

 What now> 6 clean - start cleaning filter by pattern - exclude items from deletion select by numbers - select items to be deleted by numbers ask each - confirm each deletion (like "rm -i") quit - stop cleaning help - this screen ? - help for prompt selection
 5: quit

egyszerű, és kilép az interaktív munkamenetből.

 1: clean

Törli a megadott elemeket. Ha ezen a ponton a 1: clean parancsot hajtanánk végre, akkor untracked_dir/ untracked_file törlésre kerülne.

 4: ask each

Minden egyes nem követett fájlon végigmegy, és megjeleníti a törlésre vonatkozó Y/N felszólítást. Ez a következőképpen néz ki:

 *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now> 4 Remove untracked_dir/ ? N Remove untracked_file ? N
 2: filter by pattern

Megjelenít egy további promptot, amely a nem követett fájlok listájának szűrésére használt bemenetet fogad el.

 Would remove the following items: untracked_dir/ untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now> 2 untracked_dir/ untracked_file Input ignore patterns>> *_file untracked_dir/

Itt a *_file wildcard mintát adjuk meg, amely ezután a nem követett fájlok listáját csak a untracked_dir-ra korlátozza.

 3: select by numbers

A 2. parancshoz hasonlóan a 3. parancs is a nem követett fájlnevek listájának finomítására szolgál. Az interaktív munkamenet a nem követett fájlnévnek megfelelő számokat kéri.

 Would remove the following items: untracked_dir/ untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now> 3 1: untracked_dir/ 2: untracked_file Select items to delete>> 2 1: untracked_dir/ * 2: untracked_file Select items to delete>> Would remove the following item: untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help

Összefoglaló

Az git clean egy kényelmi módszer a repó munkakönyvtárában lévő nem követett fájlok törlésére. A nem követett fájlok azok, amelyek a repó könyvtárában vannak, de még nem kerültek hozzá a repó indexéhez a git add segítségével. Összességében a git clean hatása a git status és az operációs rendszer natív törlési eszközeivel érhető el. A Git clean a git reset mellett használható a repositoryban lévő minden hozzáadás és commit teljes visszavonására.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.