Close

Git Clean

In dit gedeelte concentreren we ons op een gedetailleerde beschrijving van de opdracht git clean. Git clean is tot op zekere hoogte een opdracht om iets ongedaan te maken. Git clean kan worden beschouwd als een aanvulling op andere opdrachten, zoals git reset en git checkout. Terwijl deze andere opdrachten werken op bestanden die eerder zijn toegevoegd aan de Git-trackingindex, werkt de opdracht git clean op niet-bijgehouden bestanden. Niet-bijgehouden bestanden zijn bestanden die zijn aangemaakt in de werkmap van je repo, maar die nog niet zijn toegevoegd aan de trackingindex van de repository met behulp van de opdracht git add.


Bekijk het volgende opdrachtregelvoorbeeld om het verschil tussen bijgehouden en niet-bijgehouden bestanden beter te begrijpen.

$ 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 <file>..." to unstage)

new file: tracked_file

Untracked files: (use "git add <file>..." to include in what will be committed) untracked_dir/ untracked_file
Git-logo
gerelateerd materiaal

Git cheat sheet

Logo Bitbucket
Oplossing bekijken

Git leren met Bitbucket Cloud

In het voorbeeld wordt een nieuwe Git-repository gemaakt in de map git_clean_test. Vervolgens wordt een tracked_file aangemaakt dat wordt toegevoegd aan de Git-index. Daarnaast wordt een untracked_file aangemaakt en een untracked_dir. In het voorbeeld wordt vervolgens git status aangeroepen, waarin uitvoer wordt weergegeven die de interne status van de bijgehouden en niet-bijgehouden wijzigingen in Git aangeeft. Met de repository in deze staat kunnen we de opdracht git clean 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 de standaardopdracht git clean een fatale fout opleveren. Het voorbeeld hierboven laat zien hoe dit eruit zou kunnen zien. Git is standaard globaal zo geconfigureerd dat aan git clean een 'force'-optie moet worden doorgegeven voor initiatie. Dit is een belangrijk veiligheidsmechanisme. Wanneer de opdracht uiteindelijk wordt uitgevoerd, is git clean niet meer ongedaan te maken. Als de opdracht volledig wordt uitgevoerd, zorgt git clean voor de harde verwijdering van het bestandssysteem, vergelijkbaar met het uitvoeren van het rm-hulpprogramma op de opdrachtregel. Zorg ervoor dat je de niet-bijgehouden bestanden echt wilt verwijderen voordat je de opdracht start.

Veelvoorkomende opties en gebruik


Gezien de voorgaande uitleg over het standaardgedrag van git clean en de bijbehorende waarschuwingen, vind je hierna verschillende toepassingen van git clean en de bijbehorende opdrachtregelopties die nodig zijn voor het gebruik ervan.

-n

Met de optie -n voert git clean een 'testrun' uit. Dit laat je zien welke bestanden verwijderd zullen worden zonder ze daadwerkelijk te verwijderen. Het is verstandig om altijd eerst een testrun uit te voeren. We kunnen deze optie demonstreren in de demo-repo die we eerder hebben aangemaakt.

$ git clean -n
Would remove untracked_file

De output geeft aan dat untracked_file wordt verwijderd wanneer de opdracht git clean wordt uitgevoerd. Merk op dat de untracked_dir hier niet in de output wordt vermeld. Git clean werkt standaard niet recursief op mappen. Dit is een ander veiligheidsmechanisme om onbedoelde permanente verwijdering te voorkomen.

-f or --force

De force-optie initieert de daadwerkelijke verwijdering van niet-bijgehouden bestanden uit de huidige map. Force is vereist, tenzij de configuratieoptie clean.requireForce is ingesteld op false. Hiermee worden niet-bijgehouden mappen of bestanden die zijn gespecificeerd met .gitignore, niet verwijderd. Laten we nu een live git clean uitvoeren in onze voorbeeldrepo.

$ git clean -f 
Removing untracked_file

De output van de opdracht toont de bestanden uit die zijn verwijderd. Je kunt hier zien dat untracked_file is verwijderd. Als je op dit punt git status uitvoert of een ls doet, kun je zien dat het bestand untracked_file verwijderd is en nergens te vinden is. Git clean -f werkt standaard op alle niet-bijgehouden bestanden in de huidige map. Bovendien kan een -waarde worden doorgegeven met de optie -f om een specifiek bestand te verwijderen.

git clean -f <path>
-d include directories

De optie -d vertelt git clean dat je ook niet-bijgehouden mappen wilt verwijderen. Standaard worden mappen genegeerd. We kunnen de optie -d toevoegen aan onze vorige voorbeelden:

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

Hier hebben we een 'testrun' uitgevoerd met de combinatie -dn, wat als output oplevert dat untracked_dir klaar is voor verwijdering. Vervolgens voeren we een geforceerde clean uit en krijgen we als output dat untracked_dir is verwijderd.

-x force removal of ignored files

Een veelvoorkomend patroon van softwarereleases is om een build- of distributieregister te hebben dat niet is gecommit in de trackingindex van de repository's. De build-map bevat dan kortstondige build-artefacten die zijn gegenereerd op basis van de gecommitte broncode. Deze build-map wordt gewoonlijk toegevoegd aan het bestand .gitignore van de repository . Het kan handig zijn om deze map ook op te schonen met andere niet-bijgehouden bestanden. Met de optie -x moet git clean ook worden toegepast op alle genegeerde bestanden. Net zoals bij eerdere aanroepen van gitclean, is het verstandig om eerst een 'testrun' uit te voeren voordat je de definitieve verwijdering uitvoert. De optie -x werkt op alle genegeerde bestanden, niet alleen op bestanden die specifiek zijn voor de projectbuild. Dit kunnen onbedoelde items zijn, zoals ./.idea IDE-configuratiebestanden.

git clean -xf

Zo kan de -d optie -x worden doorgegeven en gecombineerd met andere optie. Dit voorbeeld toont een combinatie met -f waarmee niet-bijgehouden bestanden uit de huidige map worden verwijderd, evenals alle bestanden die Git gewoonlijk negeert.

Interactieve modus of git clean interactief


Naast de ad-hoc-opdrachtregeluitvoering die we tot nu toe hebben gedemonstreerd, heeft git clean een 'interactieve' modus die je kunt starten door de optie -i door te geven. Laten we de voorbeeldrepo uit de introductie van dit document nog eens bekijken. In dat beginstadium starten we een interactieve cleansessie.

$ 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 optie -d, zodat deze dus zal ook reageren op onze untracked_dir. In de interactieve modus wordt een What Now>-prompt weergegeven waarin wordt gevraagd om een opdracht toe te passen op de niet-bijgehouden bestanden. De opdrachten zelf spreken voor zich. We zullen ze allemaal kort bekijken in willekeurige volgorde, te beginnen met de 6: help. Als je opdracht 6 selecteert, worden de andere opdrachten 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 eenvoudig en verlaat de interactieve sessie.

1: clean

Verwijdert de aangegeven items. Als we 1: clean zouden uitvoeren, dan wordt untracked_dir/untracked_file verwijderd

4: ask each

herhaalt elk nietbijgehouden bestand en geeft een Y/N-prompt voor een verwijdering weer. Dit 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/ [y/N]? N
Remove untracked_file [y/N]? N
2: filter by pattern

Geeft een extra prompt weer waarvan de input wordt gebruikt om de lijst met niet-bijgehouden 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 jokertekenpatroon *_file in, dat vervolgens de lijst met niet-bijgehouden bestanden beperkt tot alleen untracked_dir.

3: select by numbers

Net als opdracht 2, dient opdracht 3 om de lijst met niet-bijgehouden bestandsnamen te verfijnen. Tijdens de interactieve sessie wordt gevraagd om cijfers die overeenkomen met een niet-bijgehouden 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


Samenvattend: git clean is een handige methode om niet-bijgehouden bestanden te verwijderen uit de werkmap van een repo. Niet-bijgehouden bestanden zijn bestanden die in de map van de repo staan, maar nog niet met git add zijn toegevoegd aan de index van de repo. Over het algemeen kan het effect van git clean worden bereikt met behulp van git status en de eigen verwijderingstools van het besturingssysteem. Git clean kan naast git reset worden gebruikt om toevoegingen en commits in een repository volledig ongedaan te maken.


Deel dit artikel
Volgend onderwerp

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Mensen die samenwerken met een muur vol tools

Bitbucket-blog

Toelichting DevOps

DevOps-leertraject

Demo Den Feature-demo's met Atlassian-experts

Hoe Bitbucket Cloud werkt met Atlassian Open DevOps

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up