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.