git як і раніше показує файли як змінені після додавання до .gitignore


252

я додаю це у файл .gitignore

.idea/*

але все одно статус такий:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

що я роблю неправильно? Я навіть додав .idea / * до глобального ~ / .gitignore_global, але статус git, все одно, показує мені:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

Відповіді:


422

Ваш .gitignoreпрацює, але він все одно відслідковує файли, оскільки вони вже були в індексі.

Щоб зупинити це, ви повинні зробити: git rm -r --cached .idea/

Коли ви виконуватимете, .idea/каталог буде вилучений із вашого сховища git, а наступні комісії ігноруватимуть .idea/каталог.

PS: Ви можете використовувати .idea/замість того, .idea/*щоб ігнорувати каталог. Ви можете знайти більше інформації про шаблони на сторінці .gitignore man .


Корисна цитата зі git-rmсторінки чоловіка

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.

Поясніть, будь ласка, що ви мали на увазі під «просто додаванням .idea / також буде працювати». Це альтернативне рішення для використання, .gitignoreа потім і виконання git rm -cached?
Мехрад

3
@Mehrad немає необхідності в * in .gitignore
Стів

2
Ні, просто додавання .idea / не працює, тому що, як ви сказали у відповіді, це вже в індексі.
Анріке де Суса

15
Отже, ви говорите, що вам потрібно commitпісля видалення кешованих файлів? Це справді здається протиінтуїтивним; це файли, які я НЕ хочу вводити. І я не хочу, щоб їх видаляли з сховища (я просто хочу, щоб вони більше не звисали навколо мого git status). Або я просто дуже розгублений?
Скотт Біггс

6
Його файли вже відслідковувались git через попередню фіксацію, тому для того, щоб видалити їх, ви повинні створити нову команду, яка видаляє їх із сховища.
mcls

47

Люди, які ще можуть шукати цю проблему, переглядають лише цю сторінку.

Це допоможе вам видалити кешовані файли індексу, а потім додавати лише ті, що вам потрібні, включаючи зміни до вашого .gitignoreфайлу.

1. git rm -r --cached .  
2. git add .
3. git commit -m 'Removing ignored files'

Ось трохи більше інформації.

  1. Ця команда видалить усі кешовані файли з індексу.
  2. Ця команда додасть усі файли, крім тих, про які згадується в gitignore .
  3. Ця команда знову заповнить ваші файли та видалить файли, які ви хочете, щоб git ігнорував, але збереже їх у вашому локальному каталозі.

1
Це було корисно для мене, я просто зазначу, що у Windows cmd окремі цитати, здається, не працюють у №3. Використання git commit -am "Видалення ігнорованих файлів" Працює, хоча.
Sundance.101

1
Не хвилюйтесь, і ще раз дякую за чітку і стисну відповідь.
Sundance.101

1
Це рішення справді возиться з моїми файлами проекту. Мені довелося повернути все після цього.
Fatmajk

1

Пропоновані тут рішення та в інших місцях не працювали для мене, тому я додам до дискусії для майбутніх читачів. Я, правда, ще не повністю розумію процедуру, але остаточно вирішив мою (подібну) проблему і хочу поділитися.

Я випадково кеширував деякі doc-каталоги з кількома сотнями файлів під час роботи з git в IntelliJ IDEA в Windows 10 і після додавання їх у .gitignore (і ПРОБАВНО їх трохи перемістив) я не зміг їх видалити зі списку змін за замовчуванням.

Я спершу здійснив фактичні зміни, які я вніс, а потім вирішив вирішити це - зайняв мене занадто довго. Я намагався, git rm -r --cached .але завжди отримував path-specПОМИЛКИ, з різними варіантами path-spec, а також зі значками -fта -rпрапорами.

git statusвсе одно показуватимуть імена файлів, тому я спробував використовувати деякі з них дослівно git rm -cached, але не пощастило. Заховання та зняття змін, здавалося, спрацювало, але вони через черговий раз знову встали в чергу (мені дуже тумано за точні часові рамки). Нарешті я видалив ці записи для гарного використання

git reset

Я припускаю, що це лише ДОБРИЙ ІДЕЯ, коли у вас немає змін, які ставлять / кешують, які ви насправді хочете зробити.


0

Просто додайте git rm -r --cached <folder_name/file_name>

Іноді ви оновлюєте .gitignore файл після команди команд файлів. Отже, файли кешуються в пам'яті. Щоб видалити кешовані файли, скористайтеся вищевказаною командою.


-2
  1. Git add.

  2. Стан Git // Перевірте файл, що модифікується

    // git reset HEAD --- замініть файл, який ви хочете ігнорувати

  3. git reset HEAD .idea / <- Тим, хто хотів виключити .idea з до завершення // git перевірити статус і файл ідеї вже не буде, і ви готові йти!

  4. git commit -m ''

  5. git push


Це було б припущенням, що ОП хоче скинути.
Радянський кордон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.