V této části se zaměříme na podrobný popis příkazu git clean. Příkaz Git clean je do jisté míry příkazem „undo“. Příkaz Git clean lze považovat za doplňkový k ostatním příkazům, jako jsou git reset a git checkout. Zatímco tyto ostatní příkazy pracují se soubory dříve přidanými do sledovacího indexu systému Git, příkaz git clean pracuje s nesledovanými soubory. Nesledované soubory jsou soubory, které byly vytvořeny v pracovním adresáři repozitáře, ale dosud nebyly přidány do sledovacího indexu repozitáře pomocí příkazu git add. Pro lepší demonstraci rozdílu mezi sledovanými a nesledovanými soubory uvažujte následující příklad příkazového řádku:

 $ 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

Příklad vytváří nový repozitář Git v adresáři git_clean_test. Poté pokračuje vytvořením adresáře tracked_file, který je přidán do indexu Git, dále je vytvořen adresář untracked_file a adresář untracked_dir. Příklad poté vyvolá git status, který zobrazí výstup udávající vnitřní stav sledovaných a nesledovaných změn systému Git. S úložištěm v tomto stavu můžeme spustit příkaz git clean a demonstrovat jeho zamýšlený účel.

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

V tomto okamžiku může spuštění výchozího příkazu git clean způsobit fatální chybu. Výše uvedený příklad demonstruje, jak to může vypadat. Ve výchozím nastavení je systém Git globálně nakonfigurován tak, že pro spuštění příkazu git clean vyžaduje předání volby „force“. Jedná se o důležitý bezpečnostní mechanismus. Když je příkaz git clean nakonec spuštěn, není možné jej vrátit zpět. Po úplném spuštění git clean dojde k tvrdému odstranění souborového systému, podobně jako při spuštění nástroje rm z příkazového řádku. Před spuštěním se ujistěte, že opravdu chcete odstranit nesledované soubory.

Běžné volby a použití

Vzhledem k předchozímu vysvětlení výchozího chování git clean a upozornění demonstruje následující obsah různé případy použití git clean a doprovodné volby příkazového řádku potřebné pro jejich fungování.

-n

Volba -n provede „suché spuštění“ git clean. Tím se ukáže, které soubory budou odstraněny, aniž by byly skutečně odstraněny. Doporučuje se vždy nejprve provést suché spuštění git clean. Tuto možnost si můžeme demonstrovat na ukázkovém repozitáři, který jsme vytvořili dříve.

 $ git clean -n Would remove untracked_file

Výstup nám říká, že untracked_file bude odstraněn po provedení příkazu git clean. Všimněte si, že untracked_dir zde není ve výstupu hlášen. Ve výchozím nastavení nebude příkaz git clean pracovat rekurzivně s adresáři. Jedná se o další bezpečnostní mechanismus, který má zabránit náhodnému trvalému odstranění.

 -f or --force

Příkaz force iniciuje skutečné odstranění nesledovaných souborů z aktuálního adresáře. Vynucení je vyžadováno, pokud není konfigurační volba clean.requireForce nastavena na hodnotu false. Neodstraní se nesledované složky nebo soubory zadané pomocí .gitignore. Proveďme nyní živé git clean v našem příkladovém repozitáři.

 $ git clean -f Removing untracked_file

Příkaz vypíše odstraněné soubory. Zde můžete vidět, že untracked_file byl odstraněn. Spuštění git status v tomto okamžiku nebo provedení ls ukáže, že untracked_file byl odstraněn a není nikde k nalezení. Ve výchozím nastavení bude git clean -f pracovat se všemi nesledovanými soubory aktuálního adresáře. Navíc lze pomocí volby -f předat hodnotu, která odstraní konkrétní soubor.

 git clean -f -d include directories

Volba -d říká git clean, že chcete odstranit také všechny nesledované adresáře, ve výchozím nastavení bude adresáře ignorovat. Volbu -d můžeme přidat do našich předchozích příkladů:

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

Zde jsme provedli „suchou zkoušku“ pomocí kombinace -dn, jejímž výstupem je untracked_dir je k odstranění. Poté provedeme vynucené čištění a obdržíme výstup, že untracked_dir je odstraněn.

 -x force removal of ignored files

Běžným vzorem při vydávání softwaru je adresář sestavení nebo distribuce, který není odevzdán do indexu sledování repozitářů. Adresář sestavení bude obsahovat efemérní artefakty sestavení, které jsou generovány z odevzdaného zdrojového kódu. Tento adresář sestavení se obvykle přidává do souboru repositories .gitignore. Tento adresář může být vhodné vyčistit i od dalších nesledovaných souborů. Volba -x říká git clean, že má zahrnout také všechny ignorované soubory. Stejně jako u předchozích volání git clean je nejlepším postupem provést nejprve „suchý běh“ před konečným smazáním. Volba -x bude působit na všechny ignorované soubory, nejen na soubory specifické pro sestavení projektu. Mohlo by se jednat o nechtěné věci, jako jsou konfigurační soubory ./.idea IDE.

 git clean -xf 

Stejně jako volbu -d lze volbu -x předávat a skládat s dalšími volbami. Tento příklad demonstruje kombinaci s -f, která odstraní nesledované soubory z aktuálního adresáře a také všechny soubory, které Git obvykle ignoruje.

Interaktivní režim nebo git clean interactive

Kromě ad-hoc spouštění příkazového řádku, které jsme si dosud ukázali, má git clean „interaktivní“ režim, který můžete spustit předáním volby -i. Vraťme se k příkladu repozitáře z úvodu tohoto dokumentu. V tomto počátečním stavu spustíme interaktivní čistou relaci.

 $ 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>

Interaktivní relaci jsme zahájili pomocí volby -d, takže bude působit i na náš untracked_dir. V interaktivním režimu se zobrazí výzva What now>, která si vyžádá příkaz k použití na nesledované soubory. Samotné příkazy jsou poměrně srozumitelné. Krátce se na ně podíváme v náhodném pořadí, přičemž začneme příkazem 6: help. Výběr příkazu 6 dále vysvětlí ostatní příkazy:

 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

Je přímočarý a ukončí interaktivní relaci.

 1: clean

Odstraní uvedené položky. Pokud bychom v tomto okamžiku provedli 1: clean, untracked_dir/ untracked_file by bylo odstraněno.

 4: ask each

bude iterovat po jednotlivých nesledovaných souborech a zobrazí Y/N výzvu k odstranění. Vypadá to následovně:

 *** 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

Zobrazí další výzvu, která přijme vstupní údaje sloužící k filtrování seznamu nesledovaných souborů.

 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/

Zde zadáme zástupný vzor *_file, který pak omezí seznam nesledovaných souborů pouze na untracked_dir.

 3: select by numbers

Podobně jako příkaz 2 funguje příkaz 3 pro zpřesnění seznamu názvů nesledovaných souborů. Interaktivní relace se zeptá na čísla, která odpovídají názvu nesledovaného souboru.

 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

Souhrn

Pokud to shrneme, git clean je pohodlná metoda pro odstranění nesledovaných souborů v pracovním adresáři repozitáře. Nesledované soubory jsou ty, které jsou v adresáři repa, ale ještě nebyly přidány do indexu repa pomocí git add. Celkově lze efektu git clean dosáhnout pomocí git status a nativních nástrojů pro mazání operačních systémů. Git clean lze použít spolu s git reset k úplnému zrušení všech přidání a revizí v úložišti.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.