.Gitignore торабына қосқаннан кейін қашықтағы репозиторийден каталогты алып тастаңыз

Мен гитарадағы кейбір директорларды жасадым. Осыдан кейін мен .gitignore файлын өзгертіп, еленбеу керек каталогты өзгерттім. Барлығы жақсы жұмыс істейді, бірақ (қазір еленбейді) каталог гитарада қалады.

Бұл каталогты github және репозитория тарихынан қалай жоюға болады?

442
қосылды автор user456814, көзі

7 жауаптар

.gitignore файлыңыздағы ережелер тек жолсыз файлдарға қолданылады. Осы каталогтағы файлдар репозиторийде бұрыннан жасалынғандықтан, оларды бөлісуіңіз, міндеттеме жасауыңыз және GitHub-ге жіберуіңіз керек:

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

Репозиторияңыздың тарихын қайта жазбастан, файлды тарихыңыздан жоюға болмайды - егер сіз басқалар репозиториймен жұмыс жасаса немесе оны бірнеше компьютерден пайдалансаңыз, мұны жасамауыңыз керек. Егер сіз мұны әлі де қаласаңыз, тарихты қайта жазу үшін go filter-branch -ді қолдана аласыз - мұнда пайдалы нұсқаулық бар .

Бұған қоса, git rm -r --cached some-directory -тен шығатын сигналды есте сақтаңыз:

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'

rm - бұл репозиторий туралы әңгімелесу; файлдар әлі де жұмыс каталогында.

788
қосылды
@MarkLongair -r және - кэштелген дегеніміз не? Рахмет.
қосылды автор Labanino, көзі
@Martin Konicek: егер осы өзгерістерді қолданатын пайдаланушы осы файлдарға өзгерістер енгізбесе, олар жойылады.
қосылды автор Mark Longair, көзі
Егер басқа біреу тартса, қазір еленбейтін файлдар олар үшін жойылуы немесе оларға қол тигізбеуі керек пе?
қосылды автор Martin Konicek, көзі
@Labanino: -r рекурсивті дегенді білдіреді, егер сіз толық каталогтар жасасаңыз, қажет. - кэштелген жұмыс істеу үшін және жұмыс каталогынан жойылудың әдеттегі тәртібін алдын-ала белгілейді және тек қана орындауға дайын дайындық алаңында жұмыс жасайды. Файлдарыңыздың жергілікті көшірмелерін сақтауды қалағаныңыз жөн.
қосылды автор entheh, көзі
Бұл жақсы жұмыс істейді, бірақ алдымен істеу керек: go reset 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 қолдансаңыз, foreach ($ i iex-дегі 'git ls-files -i --exclude-from = .gitignore') {go rm --cached $ i}
қосылды автор 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, көзі

Блэнделлдің жауабы жұмыс істеуі керек, бірақ кейбіреулерге себеп болған жоқ. Мен алдымен файлға бірінші пәрменмен шығарылған файл атауын құбырға салып, содан кейін осы файл арқылы шоғырландырып, сол файлды бір-бірлеп жоюға тура келді.

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
қосылды

Блэндллдың алғашқы жауабы маған жұмыс істемеді. Бірақ бұл маған дұрыс жолды көрсетті. Мен де осындай нәрсені жасадым:

> 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 файлын өңдеңіз және гитара бетіндегі басты репозиторийді жоюға болатын қалта жазбасын жойыңыз.

  3. Жоба қалтасын қабылдау және синхрондау.

  4. Қапшықты жоба қалтасына қайтадан жылжытыңыз

  5. .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

Содан кейін go push --force - all .

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

0
қосылды
Оң. go rm файлды болашақтағы соңғы әрекеттен алып тастайды. go filter-branch оны бүкіл тарихтан жоюға мүмкіндік береді. Қараңыз: help.github.com/articles/…
қосылды автор Shaun Luttin, көзі
go rm пайдаланудан өзгеше git filter-branch қалай пайдаланылады? Мен бастапқыда git filter-branch нұсқасын пайдалану керек деп ойладым, бірақ мұнда көптеген түсініктемелер go rm пайдалануды ұсынады. go rm түсінгенімнен оны тек ағымдағы жұмыс каталогынан және индексінен жояды. Бірақ, егер оның қосылатын саны бұрын орындалса, ол әлі де репозиторийде болады.
қосылды автор alpha_989, көзі