In dit gedeelte zullen we ons richten op een gedetailleerde bespreking van het git clean commando. Git clean is tot op zekere hoogte een ‘ongedaan maken’ commando. Git clean kan worden beschouwd als een aanvulling op andere commando’s zoals git reset en git checkout. Terwijl deze andere commando’s werken op bestanden die eerder aan de Git tracking index zijn toegevoegd, werkt het git clean commando op niet-getraceerde bestanden. Ongevolgde bestanden zijn bestanden die in de werkmap van je repo zijn aangemaakt, maar nog niet aan de tracking index van het repository zijn toegevoegd met het git add commando. Om het verschil tussen tracked en untracked bestanden beter te demonstreren, zie het volgende commando regel voorbeeld:

 $ 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

Het voorbeeld maakt een nieuwe Git repository aan in de git_clean_test directory. Het gaat dan verder met het aanmaken van een tracked_file die aan de Git index wordt toegevoegd, daarnaast wordt er een untracked_file aangemaakt, en een untracked_dir. Het voorbeeld roept dan git status aan, welke uitvoer toont die de interne status van Git aangeeft met tracked en untracked wijzigingen. Met de repository in deze staat, kunnen we het git clean commando uitvoeren om het beoogde doel te demonstreren.

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

Op dit punt kan het uitvoeren van het standaard git clean commando een fatale fout opleveren. Het voorbeeld hierboven laat zien hoe dit er uit kan zien. Standaard is Git zo ingesteld dat git clean een “force” optie moet krijgen om te starten. Dit is een belangrijk veiligheidsmechanisme. Als git clean uiteindelijk uitgevoerd is, kan het niet ongedaan gemaakt worden. Wanneer git clean volledig wordt uitgevoerd, zal het een harde verwijdering van het bestandssysteem uitvoeren, vergelijkbaar met het uitvoeren van de commandoregel rm utility. Zorg ervoor dat u de ongevolgde bestanden echt wilt verwijderen voordat u het uitvoert.

Algemene opties en gebruik

Gezien de vorige uitleg van het standaardgedrag en de beperkingen van git clean, demonstreert de volgende inhoud verschillende gebruikssituaties van git clean en de bijbehorende commandoregelopties die nodig zijn voor hun werking.

-n

De -n optie voert een “dry-run” uit van git clean. Dit laat u zien welke bestanden zullen worden verwijderd zonder ze daadwerkelijk te verwijderen. Het is een goede gewoonte om altijd eerst een “dry run” van git clean uit te voeren. We kunnen deze optie demonstreren in de demo repo die we eerder hebben gemaakt.

 $ git clean -n Would remove untracked_file

De uitvoer vertelt ons dat untracked_file zal worden verwijderd wanneer het git clean commando wordt uitgevoerd. Merk op dat de untracked_dir hier niet in de uitvoer wordt gemeld. Standaard zal git clean niet recursief werken op directories. Dit is een ander veiligheidsmechanisme om onbedoelde permanente verwijdering te voorkomen.

 -f or --force

De force optie initieert de daadwerkelijke verwijdering van niet-getraceerde bestanden uit de huidige directory. Force is vereist tenzij de clean.requireForce configuratie optie op false is gezet. Dit verwijdert geen ongevolgde mappen of bestanden die zijn opgegeven met .gitignore. Laten we nu een live git clean uitvoeren in onze voorbeeld repo.

 $ git clean -f Removing untracked_file

Het commando zal de bestanden die verwijderd zijn, uitvoeren. U kunt hier zien dat untracked_file is verwijderd. Het uitvoeren van git status op dit punt of het doen van een ls zal laten zien dat untracked_file is verwijderd en nergens meer te vinden is. Standaard zal git clean -f werken op alle ongevolgde bestanden in de huidige directory. Daarnaast kan een waarde worden doorgegeven met de -f optie die een specifiek bestand zal verwijderen.

 git clean -f -d include directories

De -d optie vertelt git clean dat u ook alle ongevolgde directories wilt verwijderen, standaard zullen directories worden genegeerd. We kunnen de -d optie toevoegen aan onze vorige voorbeelden:

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

Hier hebben we een ‘dry run’ uitgevoerd met de -dn combinatie die aangeeft dat untracked_dir aan de beurt is om verwijderd te worden. Daarna voeren we een ‘forced clean’ uit, en krijgen de uitvoer dat untracked_dir verwijderd is.

 -x force removal of ignored files

Een veel voorkomend software release patroon is om een build of distributie directory te hebben die niet gecommit is op de repositories tracking index. De build directory bevat efemere build artefacten die worden gegenereerd uit de gecommitteerde broncode. Deze bouwmap wordt meestal toegevoegd aan het .gitignore bestand van de repositories. Het kan handig zijn om deze directory ook op te schonen met andere untracked bestanden. De optie -x vertelt git clean om ook alle genegeerde bestanden te includen. Net als bij eerdere git clean-aanroepen, is het een goede gewoonte om eerst een ‘dry run’ uit te voeren, voordat de bestanden definitief worden verwijderd. De -x optie zal op alle genegeerde bestanden werken, niet alleen op project build specifieke bestanden. Dit kunnen onbedoelde dingen zijn zoals ./.idea IDE configuratie bestanden.

 git clean -xf 

Zoals de -d optie kan -x worden doorgegeven en samengesteld met andere opties. Dit voorbeeld demonstreert een combinatie met -f die ongetraceerde bestanden uit de huidige directory zal verwijderen, evenals alle bestanden die Git normaal negeert.

Interactieve modus of git clean interactive

Naast de ad-hoc commando regel executie die we tot nu toe hebben laten zien, heeft git clean een “interactieve” modus die je kunt starten door de -i optie door te geven. Laten we de voorbeeld repo uit de inleiding van dit document opnieuw bekijken. In die begintoestand zullen we een interactieve schone sessie starten.

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

We hebben de interactieve sessie gestart met de -d optie, zodat deze ook op onze untracked_dir zal reageren. De interactieve modus zal een What now> prompt tonen die om een commando vraagt om toe te passen op de ongevolgde bestanden. De commando’s zelf spreken voor zich. We zullen ze kort bekijken in willekeurige volgorde, te beginnen met commando 6: help. Door commando 6 te selecteren worden de andere commando’s verder uitgelegd:

 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

Is recht-toe-recht-aan en zal de interactieve sessie afsluiten.

 1: clean

Wijdert de aangegeven items. Als we 1: clean op dit punt zouden uitvoeren, zou untracked_dir/ untracked_file worden verwijderd.

 4: ask each

zal itereren over elk niet getraceerd bestand en een Y/N prompt tonen voor een verwijdering. Het ziet er als volgt uit:

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

Weergave van een extra prompt die invoer vraagt om de lijst van niet-getraceerde bestanden te filteren.

 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/

Hier voeren we het *_file jokertekenpatroon in dat vervolgens de lijst van niet-getraceerde bestanden beperkt tot alleen untracked_dir.

 3: select by numbers

Gelijkaardig aan commando 2, werkt commando 3 om de lijst van niet-getraceerde bestandsnamen te verfijnen. De interactieve sessie zal om getallen vragen die overeenkomen met een niet gevolgde bestandsnaam.

 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

Samenvatting

Om samen te vatten, git clean is een gemakkelijke methode om niet gevolgde bestanden in de werkmap van een repo te verwijderen. Niet gevolgde bestanden zijn bestanden die in de directory van de repo staan, maar nog niet zijn toegevoegd aan de index van de repo met git add. Over het algemeen kan het effect van git clean worden bereikt met git status en de eigen verwijder-gereedschappen van het besturingssysteem. Git clean kan samen met git reset worden gebruikt om alle toevoegingen en commits in een repository volledig ongedaan te maken.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.