Gitignore не працює


275

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

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

Це в каталозі master, який є моїм git repo. Я запускаю Git 1.8.4.2, тому що я перебуваю на MacBook під керуванням OSX 10.8.6.


4
1. які файли індексуються, хоча вони не повинні? 2. Ви додали .gitignore після додавання цих файлів до репо?
Ахмад

2
@Ahmad У кількох проектах /bin/папка все ще відображається, коли я роблю git status. Я не змінив ці файли, оскільки я додав.gitignore
user3280133

1
"оскільки я додав .gitignore" - значить, ви додали .gitignore після додавання файлів?
Ахмад

3
можливий дублікат .gitignore не працює
Ліам

Відповіді:


684

Файли / папки у вашому контролі версій не будуть видалятись лише тому, що ви додали їх до .gitignore. Вони вже є у сховищі, і ви повинні їх видалити. Ви можете просто зробити це за допомогою цього:

(Не забудьте зробити все, що ви змінили, перш ніж це зробити. )

git rm -rf --cached .
git add .

Це видаляє всі файли із сховища та додає їх назад (цього разу з дотриманням правил у вашому .gitignore).


2
або ви можете просто спробувати повернути файли / папки, які ви додали до .gitignore, використовуючи git checkout folder_to_ignore / *
Zahra

1
@Greenish , але це не буде працювати , якщо вони вже були здійснені, працюватимуть тільки , якщо вони були організовані, що в разі папка була вже в .gitignore не повинно статися (якщо ви не змусити надбудову) :)
Ahmad

1
не працює для мене, коли я натискаю зміни на github. Каже, все актуально !!!!
Доктор Юнес Генні

1
Вибачте, Ахмед, я усунув свою проблему, видаливши файл gitignore і знову потягнувши та натиснувши на віддалений репо. Я більше не пам’ятаю, що воно говорило, коли я набирала статус git. Моя проблема виправлена. Дуже дякую.
Доктор Юнес Генні

3
Я думаю, що краще git додати команду 'git ignore', щоб спростити це. Таким чином, ми могли просто використовувати git ignore path/fileв будь-який час.
Тів

123

Щоб відстебнути один файл, який уже доданий / ініціалізований у вашому сховищі, тобто припиніть відстежувати файл, але не видаляти його із використання системи: git rm --cached filename

Щоб відстебнути кожен файл, який зараз знаходиться у вашому .gitignore:

Спершу введіть будь-які незрозумілі зміни коду, а потім запустіть цю команду:

git rm -r --cached .

Це видаляє будь-які змінені файли з індексу (область постановки), а потім просто запустіть:

git add .

Здійснити це:

git commit -m ".gitignore is now working"

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

Як би ви скористалися цією командою для видалення папки з кеша замість файлу?
RealMJDev

15

Спустившись трохи по кролячій норі, намагаючись слідувати відповіді на це питання (можливо, тому, що мені довелося це зробити в проекті візуальної студії), я виявив, що простіший шлях - це

  1. Виріжте та вставіть файли, які я більше не хочу відслідковувати у тимчасове місце

  2. Зробіть "видалення" цих файлів

  3. Зробіть модифікацію .gitignoreдля виключення тимчасово переміщених файлів

  4. Перенесіть файли назад у папку.

Я вважав, що це найбільш прямий шлях для цього (принаймні, у візуальній студії, або я б припустив, що в іншому середовищі, що базується на IDE, на зразок Android Studio), не випадково застреливши себе в ногу з досить проникливим git rm -rf --cached ., після чого проект візуальної студії, над яким я працював, не завантажувався.


2
Мені дуже подобається такий підхід - здається менш руйнівним, навіть якщо він не вважається "належним".
onietiman

6

У моєму випадку це було порожнє місце на початку файлу, яке чітко з’явилося, коли я відкрив файл у Блокноті, не було очевидним у коді Visual Studio.


4

Я використовував щось для створення загального .gitignoreдля мене, і я натрапив на це. Прочитавши відповідь @Ozesh, я відкрив код VS, оскільки в ній справа є гарний індикатор, який показує тип закінчень рядків. Це був LF, тому я перейшов на CRLF, як було запропоновано, але без кісток.

Потім я подивився поруч із закінченнями рядка і помітив, що це було збережено за допомогою UTF16. Тож я переробив, використовуючи UTF8, що кодує вуаля, він спрацював. Я не думав, що CRLF має значення, тому я змінив його на LF, щоб бути впевненим, і він все ще працював.

Звичайно, це не було проблемою з ОП, оскільки він уже вчинив файли, тому вони вже були індексовані, але я подумав, що поділюсь у випадку, якщо хтось інший натикається на це.

TLDR ; Якщо ви ще не ввели файли, а .gitignore досі не дотримується, тоді перевірте кодування файлу та переконайтеся, що його UTF8, а якщо це не працює, то, можливо, спробуйте зіпсувати з закінченнями рядків.


1
UTF16 був винуватцем для мене. Відкрито код VS> відкрито .gitignore> відкрив командний рядок> "Змінити кодування файлу"> "UTF-8"> Зберегти файл
Майкл

3

У моєму випадку білі простори в кінці рядків .gitignore були причиною. Тому стежте за пробілами в .gitignore!


2

Я вирішив свою проблему, зробивши наступне:

Перш за все, я користувач Windows, але я зіткнувся з подібною проблемою. Отже, я розміщую тут своє рішення.

Є одна проста причина, чому іноді .gitignore не працює так, як належить. Це пов'язано з поведінкою конверсії EOL.

Ось швидке виправлення цього

Редагувати> Перетворення EOL> Формат Windows> Зберегти

Ви можете звинуватити в цьому налаштування свого текстового редактора .

Наприклад:

Оскільки я розробник Windows, я зазвичай використовую Notepad ++ для редагування тексту на відміну від користувачів Vim.

Отже, що відбувається, коли я відкриваю файл .gitignore за допомогою Notepad ++, він виглядає приблизно так:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

Якщо я відкрию той самий файл, використовуючи Блокнот за замовчуванням, це те, що я отримую

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

Отже, ви вже могли здогадатися, дивлячись на вихід. Все в .gitignore перетворилося на один лайнер, і оскільки на початку є ##, воно діє так, ніби все прокоментується.

Спосіб виправити це просто: просто відкрийте файл .gitignore за допомогою Notepad ++, після чого виконайте наступне

Редагувати> Перетворення EOL> Формат Windows> Зберегти

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


1

Також коментарі повинні бути у власній лінії. Їх не можна ставити після вступу. Отже, це не спрацює:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

Але це спрацює:

# fine to comment here
/node_modules

0

Чи git reset --hardпрацює для когось? Я не кажу, що це хороше рішення, воно, здавалося, спрацювало вперше, коли я спробував.


Будь ласка, ігноруйте мій коментар вище. Хтось на роботі робив щось не так у Git, це спричиняло повторювані папки, і я не знав про це досить довго. Дякую.
користувач1889992

0

Я зробив велику помилку, редагуючи свою dockerignore, працював чудово після того, як знайшов правильний файл ігнорування: p


0

Додавання мого шматочка, оскільки це популярне питання.

Я не зміг розмістити .history каталог всередині .gitignore, оскільки незалежно від того, яке комбо я намагався, воно просто не вийшло. Windows продовжує генерувати нові файли при кожному збереженні, і я зовсім не хочу їх бачити.

введіть тут опис зображення

Але потім я зрозумів, що це лише моє особисте середовище розвитку на моїй машині. Такі речі, як .history або .vscode, для мене є специфічними, тому було б дивно, якби кожен включав свої власні записи .gitignore, виходячи з того, які IDE чи ОС вони використовують.

Отже, це працювало для мене, просто додайте ".history" до .git / info / виключити

echo ".history" >> .git/info/exclude
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.