Tässä osassa keskitymme käsittelemään yksityiskohtaisesti komentoa git clean. Git clean on jossain määrin ”kumoa”-komento. Git clean voidaan katsoa täydentävän muita komentoja, kuten git reset ja git checkout. Siinä missä nämä muut komennot toimivat tiedostoihin, jotka on aiemmin lisätty Git-seurantaindeksiin, komento git clean toimii tiedostoihin, joita ei ole vielä seurattu. Jäljentämättömät tiedostot ovat tiedostoja, jotka on luotu reposi työhakemistoon, mutta joita ei ole vielä lisätty arkiston seurantaindeksiin git add-komennolla. Jotta voit paremmin havainnollistaa jäljitettyjen ja jäljittelemättömien tiedostojen eron, tarkastele seuraavaa komentoriviesimerkkiä:

 $ 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

Esimerkki luo uuden Git-tietovaraston hakemistoon git_clean_test. Sen jälkeen se jatkaa luomalla tracked_file, joka lisätään Git-hakemistoon, lisäksi luodaan untracked_file ja untracked_dir. Esimerkki kutsuu sitten git status, joka näyttää tulosteen, joka osoittaa Gitin sisäisen tilan seurattujen ja seuraamattomien muutosten osalta. Kun arkisto on tässä tilassa, voimme suorittaa komennon git clean osoittaaksemme sen käyttötarkoituksen.

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

Tässä vaiheessa oletuskomennon git clean suorittaminen saattaa tuottaa kohtalokkaan virheen. Yllä oleva esimerkki osoittaa, miltä tämä voi näyttää. Oletusarvoisesti Git on globaalisti konfiguroitu vaatimaan, että git clean:lle on annettava ”force”-vaihtoehto aloitusta varten. Tämä on tärkeä turvamekanismi. Kun git clean on lopullisesti suoritettu, sitä ei voi perua. Kun git clean on kokonaan suoritettu, se tekee kovan poiston tiedostojärjestelmästä, kuten komentorivin rm-apuohjelman suorittaminen. Varmista ennen sen suorittamista, että haluat todella poistaa jäljittämättömät tiedostot.

Yleiset optiot ja käyttö

Kun otetaan huomioon edellinen selitys git clean:n oletuskäyttäytymisestä ja varoituksista, seuraavassa sisällössä esitellään erilaisia git clean:n käyttötapauksia ja niihin liittyviä komentorivin optioita, joita tarvitaan niiden suorittamiseen.

-n

Vaihtoehto -n suorittaa git clean:n ”kuivakäytön”. Tämä näyttää, mitkä tiedostot tullaan poistamaan poistamatta niitä itse asiassa. Parhaana käytäntönä on aina suorittaa ensin git clean:n kuivakäyttö. Voimme demonstroida tätä vaihtoehtoa aiemmin luomassamme demorepossa.

 $ git clean -n Would remove untracked_file

Tuloste kertoo, että untracked_file poistetaan, kun komento git clean suoritetaan. Huomaa, että untracked_dir ei ilmoiteta tässä tulosteessa. Oletusarvoisesti git clean ei toimi rekursiivisesti hakemistoihin. Tämä on toinen turvamekanismi, jolla estetään vahingossa tapahtuva pysyvä poisto.

 -f or --force

Vaihtoehto force käynnistää jäljittämättömien tiedostojen varsinaisen poistamisen nykyisestä hakemistosta. Force on pakollinen, ellei määritysvaihtoehtoa clean.requireForce ole asetettu false. Tämä ei poista .gitignore:llä määritettyjä jäljittämättömiä kansioita tai tiedostoja. Suoritetaan nyt live git clean esimerkkirepossamme.

 $ git clean -f Removing untracked_file

Komento tulostaa poistetut tiedostot. Tässä näkyy, että untracked_file on poistettu. Suorittamalla git status tässä vaiheessa tai tekemällä ls näet, että untracked_file on poistettu eikä sitä löydy enää mistään. Oletusarvoisesti git clean -f vaikuttaa kaikkiin nykyisen hakemiston jäljittämättömiin tiedostoihin. Lisäksi -f-optiolla voidaan välittää arvo, joka poistaa tietyn tiedoston.

 git clean -f -d include directories

Vaihtoehto -d kertoo git clean:lle, että haluat poistaa myös kaikki jäljittämättömät hakemistot, oletusarvoisesti se ei huomioi hakemistoja. Voimme lisätä -d-vaihtoehdon aiempiin esimerkkeihimme:

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

Tässä olemme suorittaneet ”kuivakäynnin” käyttämällä -dn-yhdistelmää, joka tuottaa tulokseksi untracked_dir on poistettavana. Sitten suoritamme pakotetun puhdistuksen ja saamme tulosteen, jonka mukaan untracked_dir on poistettu.

 -x force removal of ignored files

Yleinen ohjelmistojen julkaisumalli on, että on olemassa rakennus- tai jakeluhakemisto, jota ei ole siirretty repositories-seurantaindeksiin. Rakennushakemisto sisältää epheerisiä rakennusartefakteja, jotka luodaan sitoutuneesta lähdekoodista. Tämä build-hakemisto lisätään yleensä repositories .gitignore -tiedostoon. Voi olla kätevää siivota tämä hakemisto myös muiden jäljittämättömien tiedostojen kanssa. Vaihtoehto -x kertoo git clean:lle, että se sisällyttää myös kaikki huomiotta jätetyt tiedostot. Kuten aiempien git clean-kutsujen kanssa, on paras käytäntö suorittaa ensin ”kuivakäynti” ennen lopullista poistoa. Vaihtoehto -x vaikuttaa kaikkiin huomiotta jätettyihin tiedostoihin, ei vain projektin rakennuskohtaisiin tiedostoihin. Tämä voi olla tahattomia asioita, kuten ./.idea IDE:n konfiguraatiotiedostoja.

 git clean -xf 

Vaihtoehdon -d tapaan -x voidaan välittää ja koostaa muiden vaihtoehtojen kanssa. Tämä esimerkki demonstroi yhdistelmää -f:n kanssa, joka poistaa jäljittämättömät tiedostot nykyisestä hakemistosta sekä kaikki tiedostot, jotka Git yleensä jättää huomioimatta.

Interaktiivinen tila tai git clean interactive

Nyt tähän mennessä demonstroimamme ad-hoc-komentoriviltä suoritettavan komennon lisäksi git clean:llä on ”interaktiivinen” tila, jonka voit käynnistää välittämällä vaihtoehdon -i. Palataanpa vielä tämän dokumentin johdannossa esitettyyn esimerkkirepoon. Tuossa alkutilassa aloitamme interaktiivisen puhdistusistunnon.

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

Olemme aloittaneet interaktiivisen istunnon -d-optiolla, joten se toimii myös meidän untracked_dir:llä. Vuorovaikutustila näyttää What now>-kehotteen, joka pyytää komentoa, jota sovelletaan jäljittämättömiin tiedostoihin. Itse komennot ovat melko itsestään selviä. Käymme lyhyesti läpi jokaisen satunnaisessa järjestyksessä alkaen komennosta 6: help. Valitsemalla komento 6 selitetään tarkemmin muut komennot:

 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

On suoraviivainen ja lopettaa interaktiivisen istunnon.

 1: clean

Poistaa ilmoitetut kohteet. Jos suorittaisimme 1: clean tässä vaiheessa, untracked_dir/ untracked_file poistettaisiin.

 4: ask each

Kierrättää jokaisen jäljittämättömän tiedoston ja näyttää Y/N-kehotuksen poistoa varten. Se näyttää seuraavalta:

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

Näyttää lisäkehotteen, joka ottaa vastaan syötteen, jota käytetään jäljittämättömien tiedostojen luettelon suodattamiseen.

 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/

Tässä syötetään *_file jokerimerkkikuvio, joka sitten rajoittaa jäljittämättömien tiedostojen luettelon vain untracked_dir:een.

 3: select by numbers

Komennon 2 tavoin komento 3 toimii jäljittämättömien tiedostojen luettelon tarkentamiseksi. Vuorovaikutteinen istunto kysyy numeroita, jotka vastaavat jäljittämätöntä tiedostonimeä.

 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

Yhteenveto

Yhteenvetona voidaan todeta, että git clean on kätevä tapa poistaa jäljittämättömiä tiedostoja repon työhakemistosta. Jäljentämättömät tiedostot ovat tiedostoja, jotka ovat repon työhakemistossa, mutta joita ei ole vielä lisätty repon hakemistoon git add:llä. Kaiken kaikkiaan git clean:n vaikutus voidaan saavuttaa käyttämällä git status ja käyttöjärjestelmän omia poistotyökaluja. Git clean:aa voidaan käyttää yhdessä git reset:n kanssa kumoamaan kokonaan kaikki lisäykset ja toimitukset arkistossa.

Vastaa

Sähköpostiosoitettasi ei julkaista.