gitignore не ігнорує папку


135

У корені мого проекту у мене fooпапка. Всередині fooпапки я маю barпапку. Я хотів би ігнорувати всі зміни всіх файлів у моїй barпапці. У мене це є gitignore:

/foo/bar

Папка перевірена: вона існує, і в ній є файли, які слід ігнорувати. gitignoreє commitтед. Однак у мене є файл, де я роблю мотивацію і знаходиться всередині моєї barпапки. Коли я друкую

git status

всередині мого git bashя бачу файл, який повинен був бути проігнорований. Що може бути причиною і як я можу успішно проігнорувати всі файли всередині моєї папки?

Зауважте, що файли попередньо ігнорувались тим самим рядком, але мені довелося тимчасово видалити цей рядок на commitщось на сервері. Після цього commitя поверну рядок у gitignore. Це було деякий час тому, але зараз я помітив, що файли будуть в git status. Я сподіваюся, що зможу змінювати ігноровані файли без їх появи у git status.


Надалі вам не потрібно змінювати свої ігнори, щоб додати щось ігнороване. git add -f ignored-fileдодасть файл, навіть якщо він знаходиться у ваших ігнорах.
Кріс

Що git status foo/bar/file-that-should-be-ignoredдає?
Кріс

Файл, який слід ігнорувати, якщо відбулася будь-яка зміна. У мене, очевидно, чогось не вистачає, але, за моїми відомостями, список статусу git повинен бути порожнім у такому випадку за умови, що / foo / bar присутній у .gitignore
Lajos Arpad

4
Здається, цей файл насправді відстежується Git. Він повинен був бути доданий до сховища в якийсь момент. Ви можете побачити його історію git log foo/bar/file-that-should-be-ignored. Якщо він не повинен бути частиною сховища, слід видалити його, git rm --cached foo/bar/file-that-should-be-ignoredа потім виконати так, як запропонував Reck нижче (хоча я б просто це зробив у файлі, а не у всій папці). Це (a) видалить файл із Git, (b) збереже файл у вашій локальній копії та (c) призведе до видалення файлу, коли інші fetchчи pullнові зобов’язання виконуватимуть.
Кріс

Відповіді:


341

Я здогадуюсь, ця папка була перевірена в git раніше?

Запустіть git rm -r --cached <folder>і перевірте ще раз.


3
Це повністю видалить папку з (поточної версії) репо. ОП хоче, щоб папка там була, але нових змін не слід відслідковувати
Гарет

На жаль, мені доведеться видалити акцепт. Це рішення видалило віддалені версії файлів при натисканні. Я хочу налаштувати gitignore ігнорувати всі файли папки, а не видаляти її з віддаленого. Це можливо? Я повернув рішення.
Лайош Арпад

12
git update-index --assume-unchanged <folder>можливо?
Рек

3
@Lajos чи не просто виправили його помилку, а не додавали туди цей заплутаний коментар "редагувати"?
Крегокс

2
@Cawas, оскільки цей сайт про обмін знаннями, відповідь: ні. Прийняття відповіді, яка містить помилку, вводить в оману. Це -r не є обов'язковим.
Лайош Арпад

46

Для мене прийнята відповідь була частиною рішення, а не цілим рішенням. Можливо, інші кроки, які я збираюся опублікувати, були очевидні, але я їх пропустив першим. Ось кроки, які я здійснив, щоб мій .gitignoreфайл ігнорував папку, яку я хотів ігнорувати:

  1. Внесіть будь-які зміни, які потрібно виправити / змінити.
  2. Виконайте цю команду: git rm -r --cached . (яка видаляє все з індексу git, щоб оновити ваше сховище git)
  3. Потім запустіть цю команду: git add . (щоб додати все назад до репо)
  4. Нарешті, виконайте ці зміни, використовуючи git commit -m ".gitignore Fixed"

Ви можете знайти посилання на статтю, звідки я знайшов рішення тут .


1
Це не прийнятне рішення, засноване на оригінальному питанні. @ lagos-arpad спеціально запитав про підкаталог, а не про весь проект. Ваше рішення видаляє все з кореневого рівня сховища git, і це не рекомендований підхід для вирішення цієї проблеми.
Justinhartman

Навіть якщо це лише підкаталог, це рішення працювало для мене, оскільки я мав справу лише з одним файлом. Чи можете ви, будь ласка, детальніше пояснити, чому це не рекомендується?
sikanderBabwani

1
Те, з чим ви мали справу, не має значення. Це не є відповіддю на питання і є потенційно небезпечним, як вказувала інша відповідь. Це видаляє речі на віддаленому репо, які ви не обов'язково хочете.
RichieHH

8

У мене виникла ця проблема, і я зрозумів, що git насправді ігнорує файли / папки правильно, але мій редактор коду (Visual Studio Code) був просто помилковим і не «виводив їх» належним чином на бічній панелі інтерфейсу користувача. Я перезапустив VSCode, і вони були сірі, як очікувалося.


Те саме тут: VS Code v1.30.2 (користувач)
xinthose

Те саме для мене. Дуже дякую за це рішення! Мені було цікаво, чому мій .gitignore не працював, поки я не спробував перезапустити VS Code. Я на Visual Studio Code v1.44.2.
Фріц Лім

6

Як додаток до прийнятої відповіді

git rm -r --cached /foo/bar/
git status

Коли я це роблю, термінал показує купу rmфайлів у цьому каталозі. Отже, щоб запобігти черговому виконанню, яке може зайво вплинути на віддалений, я зробив:

git reset HEAD *
git status

Після цього він нічого не сказав робити, і коли я змінюю файли всередині /foo/bar/і роблю git statusвсе одно, я отримую nothing to commit.


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