I dette afsnit vil vi fokusere på en detaljeret diskussion af git clean-kommandoen. Git clean er til en vis grad en “undo”-kommando. Git clean kan betragtes som et supplement til andre kommandoer som git reset og git checkout. Mens disse andre kommandoer opererer på filer, der tidligere er tilføjet til Git-sporingsindekset, opererer git clean-kommandoen på ikke-sporede filer. Ikke-sporede filer er filer, der er blevet oprettet i dit repo’s arbejdskatalog, men som endnu ikke er blevet tilføjet til repositoriets sporingsindeks ved hjælp af kommandoen git add. For bedre at demonstrere forskellen mellem sporede og usporede filer kan du overveje følgende kommandolinjeeksempel:

 $ 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

Eksemplet opretter et nyt Git-repositorium i mappen git_clean_test. Det fortsætter derefter med at oprette en tracked_file, som tilføjes til Git-indekset, desuden oprettes der en untracked_file og en untracked_dir. Eksemplet påkalder derefter git status, som viser output, der angiver Gits interne tilstand med sporede og ikke-sporede ændringer. Med repositoriet i denne tilstand kan vi udføre kommandoen git clean for at demonstrere dens tilsigtede formål.

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

På dette tidspunkt kan det give en fatal fejl at udføre standardkommandoen git clean. Eksemplet ovenfor demonstrerer, hvordan dette kan se ud. Som standard er Git globalt konfigureret til at kræve, at git clean skal have en “force”-indstilling for at blive igangsat. Dette er en vigtig sikkerhedsmekanisme. Når git clean er endeligt udført, kan det ikke fortrydes. Når git clean er fuldt eksekveret, vil git clean foretage en hård sletning af filsystemet, svarende til at udføre kommandolinjen rm-hjælpeprogrammet. Sørg for, at du virkelig ønsker at slette de usporede filer, før du kører den.

Almindelige indstillinger og brug

I betragtning af den foregående forklaring af git cleans standardadfærd og forbehold, demonstrerer det følgende indhold forskellige git clean-brugstilfælde og de ledsagende kommandolinjeindstillinger, der kræves for deres drift.

-n

Optionen -n udfører en “tørkørsel” af git clean. Dette vil vise dig, hvilke filer der skal fjernes, uden at de faktisk fjernes. Det er en bedste praksis altid først at udføre en tørkørsel af git clean. Vi kan demonstrere denne indstilling i den demo repo, vi oprettede tidligere.

 $ git clean -n Would remove untracked_file

Opdatet fortæller os, at untracked_file vil blive fjernet, når git clean-kommandoen udføres. Bemærk, at untracked_dir ikke er rapporteret i outputtet her. Som standard vil git clean ikke operere rekursivt på mapper. Dette er endnu en sikkerhedsmekanisme for at forhindre utilsigtet permanent sletning.

 -f or --force

Den force-indstilling igangsætter den faktiske sletning af usporede filer fra den aktuelle mappe. Force er påkrævet, medmindre konfigurationsindstillingen clean.requireForce er indstillet til false. Dette fjerner ikke usporede mapper eller filer, der er angivet med .gitignore. Lad os nu udføre en live git clean i vores eksempelrepo.

 $ git clean -f Removing untracked_file

Kommandoen vil outputte de filer, der er fjernet. Du kan se her, at untracked_file er blevet fjernet. Hvis du udfører git status på dette tidspunkt eller laver en ls, vil det vise, at untracked_file er blevet slettet og ikke er at finde nogen steder. Som standard vil git clean -f operere på alle de ikke-sporede filer i den aktuelle mappe. Derudover kan der overføres en værdi med indstillingen -f, som vil fjerne en bestemt fil.

 git clean -f -d include directories

Indstillingen -d fortæller git clean, at du også ønsker at fjerne eventuelle ikke-sporede mapper, som standard vil den ignorere mapper. Vi kan tilføje -d-indstillingen til vores tidligere eksempler:

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

Her har vi udført en “tørkørsel” ved hjælp af -dn-kombinationen, som udsender untracked_dir er klar til at blive fjernet. Derefter udfører vi en tvungen oprydning og modtager output om, at untracked_dir er fjernet.

 -x force removal of ignored files

Et almindeligt mønster for softwareudgivelser er at have en build- eller distributionsmappe, som ikke er overført til indekset for sporing af repositories. Bygmappen vil indeholde flygtige bygningsartefakter, der genereres fra den commitede kildekode. Denne build-mappe tilføjes normalt til filen repositories .gitignore. Det kan være praktisk at rense denne mappe også med andre ikke-sporede filer. Indstillingen -x fortæller git clean, at den også skal inkludere alle ignorerede filer. Som med tidligere git clean-opkald er det en bedste praksis at udføre en “tørkørsel” først, inden den endelige sletning. Indstillingen -x vil virke på alle ignorerede filer, ikke kun på projektbygningsspecifikke filer. Det kan være utilsigtede ting som ./.idea IDE-konfigurationsfiler.

 git clean -xf 

Lige -d-indstillingen -x kan overgives og sammensættes med andre indstillinger. Dette eksempel demonstrerer en kombination med -f, der fjerner ikke-sporede filer fra den aktuelle mappe samt alle filer, som Git normalt ignorerer.

Interaktiv tilstand eller git clean interactive

Ud over den ad hoc-kommandolinjeudførelse, som vi har demonstreret indtil nu, har git clean en “interaktiv” tilstand, som du kan starte ved at overgive -i-indstillingen. Lad os genbesøge eksempel-repo’en fra indledningen af dette dokument. I denne indledende tilstand vil vi starte en interaktiv ren session.

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

Vi har indledt den interaktive session med -d-indstillingen, så den vil også handle på vores untracked_dir. Den interaktive tilstand vil vise en What now>-prompt, der anmoder om en kommando, der skal anvendes på de ikke-sporede filer. Selve kommandoerne er ret selvforklarende. Vi vil tage et kort kig på hver enkelt i en tilfældig rækkefølge og starter med kommando 6: help. Hvis du vælger kommando 6, forklares de andre kommandoer yderligere:

 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

Er ligetil og afslutter den interaktive session.

Sletter de angivne elementer. Hvis vi skulle udføre 1: clean på dette tidspunkt, ville untracked_dir/ untracked_file blive fjernet.

 4: ask each

vil iterere over hver enkelt usporet fil og vise en Y/N prompt for en sletning. Det ser ud som følgende:

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

Vil vise en ekstra prompt, der tager imod input, der bruges til at filtrere listen over ikke-sporede filer.

 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/

Her indtaster vi *_file jokertegnsmønsteret, som derefter begrænser listen over ikke-sporede filer til kun untracked_dir.

 3: select by numbers

Som i kommando 2 fungerer kommando 3 til at forfine listen over ikke-sporede filnavne. Den interaktive session vil bede om tal, der svarer til et untracked filnavn.

 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

Summary

For at opsummere er git clean en bekvemmelighedsmetode til sletning af untracked filer i et repo’s arbejdskatalog. Ikke-sporede filer er de filer, der er i repo’ens mappe, men som endnu ikke er blevet tilføjet til repo’ens indeks med git add. Samlet set kan effekten af git clean opnås ved hjælp af git status og operativsystemets native sletningsværktøjer. Git clean kan bruges sammen med git reset til fuldt ud at fortryde alle tilføjelser og commits i et repository.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.