Ištrinkite failą iš „Git“ saugyklos, neištrindami iš vietinės failų sistemos

Mano pradinis įsipareigojimas sudarė žurnalo failus. Pridėjau *log prie „ .gitignore ir dabar noriu pašalinti žurnalo failus iš mano saugyklos.

 git rm mylogfile.log 

pašalins failą iš saugyklos, bet taip pat pašalins jį iš vietinės rinkmenų sistemos.

Kaip ištrinti šį failą iš repo , neištrinant vietinės failo kopijos?

2517
17 июля '09 в 17:56 2009-07-17 17:56 mveermano nustatytą liepos 17 d., 17:56, 2009-07-17 17:56
@ 9 atsakymai

Už vieną failą:

 git rm --cached mylogfile.log 

Vienam katalogui:

 git rm --cached -r mydirectory 
3616
17 июля '09 в 17:57 2009-07-17 17:57 atsakymas duotas liepos 17 d. 17 val. 17:57 2009-07-17 17:57

Jei norite pašalinti visą aplanką iš repo (pvz., Persiųskite failus), atlikite šiuos veiksmus:

 git rm -r --cached folderName 
border=0

Aš padariau kai kuriuos resharper failus ir nenorėjau, kad jie būtų išsaugoti kitiems projekto naudotojams.

253
04 апр. atsakymą pateikė Sam Tyson 04 balandis. 2012-04-04 21:14 '12 9:14 val. 2012-04-04 21:14

Taip pat galite ištrinti failus iš saugyklos pagal .gitignore, neištrindami jų iš vietinės failų sistemos:

 git rm --cached `git ls-files -i -X .gitignore` 

Arba, „Windows PowerSell“:

 git rm --cached $(git ls-files -i -X .gitignore) 
171
31 янв. „ Techbrunch“ atsakymas dėl sausio 31 d 2014-01-31 13:05 '14, 13:05 2014-01-31 13:05

Be to, jei siunčiate slaptus duomenis (pvz., Failą, kuriame yra slaptažodžiai), turite jį visiškai pašalinti iš saugyklos istorijos. Štai kaip tai padaryti: http://help.github.com/remove-sensitive-data/

65
21 авг. atsakymas pateikiamas 21 d. 2011-08-21 15:16 '11, 15:16, 2011-08-21 15:16

Pagal mano atsakymą čia: ngn-wiki.ru.site/questions/1963 / ...

Norėdami pašalinti aplanką / katalogą ar failą tik iš git repozitoriumo, o ne iš vietinės, pabandykite 3 paprastus veiksmus.


Katalogo pašalinimo veiksmai

 git rm -r --cached File-or-FolderName git commit -m "Removed folder from repository" git push origin master 

Veiksmai, kuriais nepaisoma šio aplanko šiose komandose.

Jei norite ignoruoti šį aplanką iš šių įvykių , sukurkite vieną failą šakniniame kataloge .gitignore ir įklijuokite šį aplanko pavadinimą į jį. Galite apgyvendinti tiek, kiek norite.

.Gitignore failas atrodys taip.

 /FolderName 

2019

61
24 авг. atsakymą pateikė eirenaios 24 rug . 2015-08-24 15:16 '15 15:16 2015-08-24 15:16

Bendresnis sprendimas:

  • Redaguokite .gitignore failą.

    ECHO mylogfile.log >> .gitignore

  • Pašalinti visus elementus iš indekso.

    git rm -r -f --cached .

  • Atkurti indeksą.

    git add .

  • Atlikite naują įrašą

    git commit -m "Removed mylogfile.log"

55
13 дек. Atsakymas pateikiamas mAsT3RpEE 13 d. 2013-12-13 14:42 '13, 14:42 pm 2013-12-13 14:42

„Git“ leidžia ignoruoti šiuos failus, darant prielaidą, kad jie nepasikeitė. Tai daroma su git update-index --assume-unchanged path/to/file.txt . Pažymėjęs failą kaip tokį, „git“ visiškai ignoruos visus šio failo pakeitimus; jie nebus rodomi, kai bus rodomas „Git“ statusas arba „git diff“, ir jie niekada nebus nustatyti.

(Nuo https://help.github.com/articles/ignoring-files )

Todėl ne ištrindami, bet ignoruodami jo pokyčius amžinai. Manau, kad jis veikia tik vietiniu lygiu, todėl darbuotojai vis tiek gali matyti pakeitimus, jei jie nevykdo to paties vadovavimo. (Vis dar reikia tai patikrinti.)

Pastaba Tai tiesiogiai neatsako į klausimą, tačiau remiasi vėlesniais komentaruose pateiktais kitais atsakymais.

18
28 янв. atsakymą pateikė Rystraum 28 sausis 2014-01-28 14:46 '14, 14:46, 2014-01-28 14:46

Minėti atsakymai man nepadėjo. Visus fiksuotus failus pašalinau naudojant filtrų šaką.

ištrinkite failą iš git saugyklos naudojant

 git filter-branch --tree-filter 'rm file' 

išimkite aplanką iš git saugyklos naudojant

 git filter-branch --tree-filter 'rm -rf directory' 

Tai pašalina katalogą ar failą iš visų įsipareigojimų.

Galite nurodyti įsipareigojimą naudodami:

 git filter-branch --tree-filter 'rm -rf directory' HEAD 

Arba diapazonas

 git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD 

Jei norite nukreipti viską į nuotolinio valdymo pultą, galite:

 git push origin master --force 
5
12 янв. Atsakymas duotas Martijn Mellensui sausio 12 d. 2016-01-12 16:59 '16, 16:59 pm 2016-01-12 16:59

Jei norite tiesiog ištrinti failą ir neištrinti iš vietinio ir nuotolinio atpirkimo, naudokite šią komandą:

 git update-index --assume-unchanged file_name_with_path 
4
15 авг. atsakymą pateikė Afraz Ahmad 15 rug . 2018-08-15 10:33 '18, 10:33 am 2018-08-15 10:33