Выдаліць каталог з аддаленага сховішчы пасля дадання іх .gitignore

Я здзейсніў і штурхнуў дырэкторыю ў GitHub. Пасля гэтага я змяніў .gitignore файл, дадаўшы каталог, які павінен быць праігнараваны. Усё працуе выдатна, але (цяпер ігнаруецца) каталог застаецца на GitHub.

Як выдаліць гэты каталог з GitHub і гісторыі рэпазітара?

442

7 адказы

Правілы ў вашым .gitignore Файл ужываецца толькі да неотслеживаемым файлаў. Бо файлы ў гэтай дырэкторыі ўжо здзейсненыя ў вашым сховішча, вы павінны прыбраць з буфера іх, ствараць фіксацыю, і націсніце што GitHub:

git rm -r --cached some-directory
git commit -m 'Remove the now ignored directory "some-directory"'
git push origin master

Вы не можаце выдаліць файл з гісторыі, ня перапісваючы гісторыю вашага сховішчы - вы не павінны рабіць гэта, калі хто-то працуюць з вашым сховішчам, ці вы выкарыстоўваеце яго з некалькіх кампутараў. Калі вы ўсё яшчэ хочаце зрабіць гэта, вы можаце выкарыстоўваць мярзотнік фільтр-філіял , каб перапісаць гісторыю - ёсць карыснае кіраўніцтва да таго, што тут .

Акрамя таго, звярніце ўвагу на выхад з гнюса п.м. -r --cached некаторы-каталог будзе нешта накшталт:

rm 'some-directory/product/cache/1/small_image/130x130/small_image.jpg'
rm 'some-directory/product/cache/1/small_image/135x/small_image.jpg'
rm 'some-directory/.htaccess'
rm 'some-directory/logo.jpg'

<Код> ет зваротная сувязь з гнюса аб сховішча; файлы ўсё яшчэ знаходзяцца ў працоўным каталогу.

788
дададзена
@MarkLongair Што -r і - кэшаваць . Дзякуючы.
дададзена аўтар Labanino, крыніца
@Martin Коничек: калі карыстальнік, які цягне гэтыя змены не мае якіх-небудзь змяненняў у гэтых файлах, то яны будуць выдаленыя.
дададзена аўтар Mark Longair, крыніца
Калі хто-то цягне, ці будзе ў цяперашні час ігнаруемых файлы будуць выдаленыя для іх ці застацца некранутым?
дададзена аўтар Martin Konicek, крыніца
@Labanino: -r азначае рэкурсіўны, неабходна, калі вы робіце цэлыя каталогі. <Код> - кэшаваць перавызначаем звычайныя паводзіны Git і іх выдалення з працоўнага каталога і пастаноўка выдаленне за здзяйсненне, і робіць мярзотнік працаваць толькі на прамежкавай вобласці гатовыя да здзяйснення. Гэта, як вы кажаце мярзотнік вы хочаце захаваць свае лакальныя копіі файлаў.
дададзена аўтар entheh, крыніца
Гэта працуе добра, але я павінен быў зрабіць першы: GIT скіду name_of_file для таго, што апісана вышэй, для працы
дададзена аўтар Edvard Haugland, крыніца

Я раблю гэта:

git rm --cached `git ls-files -i --exclude-from=.gitignore` 
git commit -m 'Removed all files that are in the .gitignore' 
git push origin master

Якія будуць выдалены ўсе файлы/тэчкі, якія знаходзяцца ў вашым гнюса ігнаруемых, зэканоміўшы вы павінны выбраць кожны з іх уручную


Гэта, здаецца, перастаў працаваць для мяне, я цяпер рабіць:

 git rm -r --cached . 
 git add .
 git commit -m 'Removed all files that are in the .gitignore' 
 git push origin master
203
дададзена
Дзякуй, гэта мне вельмі дапамагло! Калі вы выкарыстоўваеце Windows PowerShell версіі, вы можаце зрабіць Еогеасп ($ я ў IEX 'Git л.з-файлы -i --exclude-с = .gitignore') {мярзотнік ГТ --cached $ я}
дададзена аўтар Matthew, крыніца
Паспрабаваў ваш другі падыход, ён выдаліў усе файлы з маёй лакальнай мярзотнік!
дададзена аўтар artnikpro, крыніца
Я думаю, вы павінны перайсці ў падкаталог і зрабіць гэта. Папраўце мяне, калі я памыляюся.
дададзена аўтар user4414636, крыніца

As per my Answer here: How to remove a directory from git repository?

Каб выдаліць тэчку/каталог толькі з рэпазітара гнюса, а не з мясцовых паспрабаваць 3 простых кроку.


Крокі, каб выдаліць каталог

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

Крокі, каб ігнараваць гэтую тэчку ў наступных фіксацый

Для таго, каб ігнараваць гэтую тэчку з наступных фіксацый зрабіць адзін файл у каранёвым каталогу з імем <моцны> .gitignore   і пакласці, што папкі імя ў яго. Вы можаце паставіць столькі, колькі вы хочаце

.gitignore file will be look like this

/FolderName

remove directory

32
дададзена
@ VSG24 рады, што дапамог !!
дададзена аўтар eirenaios, крыніца
@Leniel Macaferi: D
дададзена аўтар eirenaios, крыніца
Гэта і ёсць адказ. (Праца па стане на ліпень 2016 году)
дададзена аўтар VSG24, крыніца
Малайцы ... гэта было тое, што я шукаў. :) Дзякуй!
дададзена аўтар Leniel Macaferi, крыніца
Добры чалавек, працаваў шарм.
дададзена аўтар Cathal, крыніца

Адказ ад Бланделла павінен працаваць, але па нейкай прычыне bizâr ён не рабіў са мной. Я павінен быў трубы першых імёнаў файлаў, якія выдаюцца першай камандай у файл, а затым перабрацца гэты файл і выдаліце ​​гэты файл адзін за адным.

git ls-files -i --exclude-from=.gitignore > to_remove.txt
while read line; do `git rm -r --cached "$line"`; done < to_remove.txt
rm to_remove.txt
git commit -m 'Removed all files that are in the .gitignore' 
git push origin master
4
дададзена

першы адказ BLUNDELL не працаваў для мяне. Аднак ён паказаў мне правільны шлях. Я зрабіў тое ж самае, як гэта:

> for i in `git ls-files -i --exclude-from=.gitignore`; do git rm --cached $i; done
> git commit -m 'Removed all files that are in the .gitignore'
> git push origin master

Я раю вам праверыць файлы, якія трэба выдаліць першым, выканаўшы прыведзеную ніжэй інструкцыю:

git ls-files -i --exclude-from=.gitignore

Я выкарыстаў файл .gitignore па змаўчанні для візуальнай студыі, і я заўважыў, што ён выдаляў ўсе часопісы і бен тэчкі ў праект, які не мой меркаванага дзеянні.

4
дададзена

Заўвага: Гэта рашэнне працуе толькі з Github Desktop GUI .

З дапамогай Github Desktop GUI вельмі проста.

  1. Перамясціць у тэчку на іншае месца (у з папкі праекта) часова.

  2. Зменіце .gitignore файл і выдаліце ​​запіс тэчкі, якая будзе выдаліць майстар-рэпазітар на старонцы GitHub.

  3. Commit і сінхранізацыі тэчкі праекту.

  4. Паўторна перамясціць тэчку ў тэчку праекта

  5. Re-Edit .gitignore файл.

Гэта ўсе.

2
дададзена
Мне падабаецца гэта - проста і лёгка.
дададзена аўтар Radmation, крыніца

Калі вы працуеце з PowerShell, паспрабуйце выканаць наступныя дзеянні ў якасці адной каманды.

PS MyRepo> git filter-branch --force --index-filter
>> "git rm --cached --ignore-unmatch -r .\\\path\\\to\\\directory"
>> --prune-empty --tag-name-filter cat -- --all

Затым, мярзотнік штуршок --force --all .

Documentation: https://git-scm.com/docs/git-filter-branch

0
дададзена
Дакладна. <Код> мярзотнік ГТ выдаліць файл з апошняга камітаў у будучыню. <Код> мярзотнік фільтр-філіял дазваляе нам выдаліць яго з усёй гісторыі. Глядзіце таксама: help.github.com/articles/…
дададзена аўтар Shaun Luttin, крыніца
Як выкарыстоўваецца GIT-фільтр аддзяленне адрозніваецца ад выкарыстання GIT ГТ ? Першапачаткова я думаў, што я павінен выкарыстоўваць версію гнюса фільтра галіны , але большасць каментарыяў тут рэкамендуецца выкарыстоўваць мярзотнік ГТ . З таго, што я разумею мярзотнік ГТ толькі выдаляе яго з бягучага працоўнага каталога і азначніка. Але калі яго дадалі множны здзяйсняе раней, ён усё роўна будзе знаходзіцца ў сховішча.
дададзена аўтар alpha_989, крыніца