În această secțiune, ne vom concentra pe o discuție detaliată a comenzii git clean. Git clean este, într-o oarecare măsură, o comandă „undo”. Git clean poate fi considerată complementară altor comenzi precum git reset și git checkout. În timp ce aceste alte comenzi operează asupra fișierelor adăugate anterior în indexul de urmărire Git, comanda git clean operează asupra fișierelor netrasate. Fișierele netrasate sunt fișiere care au fost create în directorul de lucru al repo-ului dumneavoastră, dar care nu au fost încă adăugate la indexul de urmărire al depozitului cu ajutorul comenzii git add. Pentru a demonstra mai bine diferența dintre fișierele urmărite și cele netrasate, luați în considerare următorul exemplu de linie de comandă:

 $ 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

Exemplul creează un nou depozit Git în directorul git_clean_test. Apoi procedează la crearea unui tracked_file care este adăugat la indexul Git, în plus, este creat un untracked_file și un untracked_dir. Exemplul invocă apoi git status, care afișează o ieșire care indică starea internă a Git de modificări urmărite și netrasate. Cu depozitul în această stare, putem executa comanda git clean pentru a demonstra scopul urmărit.

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

În acest moment, executarea comenzii implicite git clean poate produce o eroare fatală. Exemplul de mai sus demonstrează cum poate arăta acest lucru. În mod implicit, Git este configurat la nivel global pentru a solicita ca git clean să primească o opțiune „force” la inițiere. Acesta este un mecanism de siguranță important. Atunci când este executat în final, git clean nu poate fi anulat. Atunci când este executat complet, git clean va face o ștergere dură a sistemului de fișiere, similar cu executarea utilitarului rm din linia de comandă. Asigurați-vă că doriți cu adevărat să ștergeți fișierele nedepistate înainte de a o executa.

Opțiuni și utilizări comune

După explicația anterioară a comportamentelor și avertismentelor implicite ale git clean, următorul conținut demonstrează diverse cazuri de utilizare a git clean și opțiunile de linie de comandă aferente, necesare pentru funcționarea lor.

-n

Opțiunea -n va efectua o „execuție uscată” a git clean. Aceasta vă va arăta ce fișiere vor fi eliminate fără a le elimina efectiv. Este cea mai bună practică să efectuați întotdeauna mai întâi o execuție „la fugă” a git clean. Putem demonstra această opțiune în repo-ul demo pe care l-am creat mai devreme.

 $ git clean -n Would remove untracked_file

Lovitura ne spune că untracked_file va fi eliminat atunci când se execută comanda git clean. Observați că untracked_dir nu este raportată în ieșirea de aici. În mod implicit, git clean nu va opera recursiv asupra directoarelor. Acesta este un alt mecanism de siguranță pentru a preveni ștergerea permanentă accidentală.

 -f or --force

Opțiunea force inițiază ștergerea efectivă a fișierelor netrasate din directorul curent. Force este necesară, cu excepția cazului în care opțiunea de configurare clean.requireForce este setată la false. Această opțiune nu va elimina folderele sau fișierele netrasate specificate de .gitignore. Să executăm acum un git clean live git clean în repo-ul nostru de exemplu.

 $ git clean -f Removing untracked_file

Comanda va afișa fișierele care sunt eliminate. Puteți vedea aici că untracked_file a fost eliminat. Executând git status în acest moment sau făcând un ls va arăta că untracked_file a fost șters și nu mai este nicăieri de găsit. În mod implicit, git clean -f va opera asupra tuturor fișierelor netrasate din directorul curent. În plus, se poate trece o valoare cu opțiunea -f care va elimina un fișier specific.

 git clean -f -d include directories

Opțiunea -d îi spune lui git clean că doriți să eliminați și toate directoarele netrasate, în mod implicit va ignora directoarele. Putem adăuga opțiunea -d la exemplele noastre anterioare:

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

Aici am executat o „probă de funcționare” folosind combinația -dn care dă ca rezultat că untracked_dir este pregătit pentru eliminare. Apoi executăm o curățare forțată și primim ca rezultat faptul că untracked_dir este eliminat.

 -x force removal of ignored files

Un model comun de lansare de software este acela de a avea un director de construcție sau de distribuție care nu este confirmat în indexul de urmărire a depozitelor. Directorul de construcție va conține artefacte de construcție efemere care sunt generate din codul sursă confirmat. Acest director de construcție este, de obicei, adăugat la fișierul „repositories .gitignore„. Poate fi convenabil să se curețe, de asemenea, acest director cu alte fișiere netrasate. Opțiunea -x îi spune lui git clean să includă, de asemenea, toate fișierele ignorate. Ca și în cazul invocărilor anterioare ale lui git clean, este o bună practică să se execute mai întâi o „execuție de probă”, înainte de ștergerea finală. Opțiunea -x va acționa asupra tuturor fișierelor ignorate, nu doar asupra celor specifice construcției proiectului. Acestea ar putea fi lucruri neintenționate, cum ar fi fișierele de configurare IDE ./.idea.

 git clean -xf 

Ca și opțiunea -d, -x poate fi transmisă și compusă cu alte opțiuni. Acest exemplu demonstrează o combinație cu -f care va elimina fișierele netrasate din directorul curent, precum și orice fișiere pe care Git le ignoră de obicei.

Modul interactiv sau git clean interactive

În plus față de execuția ad-hoc în linie de comandă pe care am demonstrat-o până acum, git clean are un mod „interactiv” pe care îl puteți iniția prin trecerea opțiunii -i. Să revizuim exemplul repo din introducerea acestui document. În această stare inițială, vom începe o sesiune interactivă de curățare.

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

Am inițiat sesiunea interactivă cu opțiunea -d, astfel încât aceasta va acționa și asupra lui untracked_dir al nostru. Modul interactiv va afișa un prompt What now> care solicită o comandă care să se aplice fișierelor netrasate. Comenzile în sine sunt destul de autoexplicative. Vom arunca o scurtă privire asupra fiecăreia într-o ordine aleatorie, începând cu comanda 6: help. Selectarea comenzii 6 va explica mai detaliat celelalte comenzi:

 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

Este directă și va ieși din sesiunea interactivă.

 1: clean

Va șterge elementele indicate. Dacă am executa 1: clean în acest moment untracked_dir/ untracked_file ar fi eliminat untracked_dir/ untracked_file.

 4: ask each

va itera peste fiecare fișier nedetectat și va afișa o cerere Y/N pentru o ștergere. Seamănă cu următoarele:

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

Afișează un prompt suplimentar care primește datele de intrare folosite pentru a filtra lista de fișiere netrasate.

 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/

Aici introducem modelul de wildcard *_file care apoi restrânge lista de fișiere netrasate la doar untracked_dir.

 3: select by numbers

Similară comenzii 2, comanda 3 funcționează pentru a rafina lista de nume de fișiere netrasate. Sesiunea interactivă va solicita numerele care corespund unui nume de fișier netrasat.

 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

Rezumat

Pentru a recapitula, git clean este o metodă convenabilă pentru ștergerea fișierelor netrasate din directorul de lucru al unui repo. Fișierele netrasate sunt cele care se află în directorul repo-ului, dar care nu au fost încă adăugate la indexul repo-ului cu git add. În general, efectul lui git clean poate fi realizat folosind git status și instrumentele de ștergere native ale sistemului de operare. Git clean poate fi utilizat împreună cu git reset pentru a anula complet orice adăugare și confirmare într-un depozit.

Lasă un răspuns

Adresa ta de email nu va fi publicată.