Gitignore не работает

Мой файл .gitignore не работает по какой-либо причине, и никакое количество Google не удалось его исправить. Вот что я имею:

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

Это в каталоге master, который является моим git репо. Я запускаю git 1.8.4.2, потому что я на MacBook с OSX 10.8.6.

Ответ 1

Файлы/папка в вашем контроле версий не будут просто .gitignore только потому, что вы добавили их в .gitignore. Они уже находятся в хранилище, и вы должны удалить их. Вы можете просто сделать это с этим:

(Не забудьте зафиксировать все, что вы изменили, прежде чем сделать это.)

git rm -rf --cached .
git add .

Это удалит все файлы из хранилища и добавит их обратно (на этот раз с соблюдением правил в вашем .gitignore).

Ответ 2

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

Чтобы отследить все файлы, которые теперь находятся в вашем .gitignore:

Сначала выполните любые незавершенные изменения кода, а затем запустите эту команду:

git rm -r --cached .

Это удаляет любые измененные файлы из индекса (промежуточной области), а затем запускает:

git add .

Зафиксировать его:

git commit -m ".gitignore is now working"

Ответ 3

После того, как вы немного побродили в кроличью дыру, пытаясь ответить на этот вопрос (возможно, потому, что я должен был сделать это в проекте визуальной студии), я нашел, что более простой путь состоял в

  • Вырезать и вставить файлы Я больше не хочу отслеживать во временное расположение

  • Зафиксировать "удаление" этих файлов

  • Зафиксируйте модификацию .gitignore, чтобы исключить временно перемещенные файлы.

  • Переместите файлы обратно в папку.

Я нашел, что это самый прямой способ сделать это (по крайней мере, в визуальной студии, или я бы предположил, что другая среда с поддержкой среды IDE, например, Android Studio), без случайной съемки в ногу с довольно распространенным git rm -rf --cached ., после чего проект визуальной студии, над которым я работал, не загружался.

Ответ 4

В моем случае это было пустое место в начале файла, которое ясно проявилось, когда я открыл файл в "Блокноте", не было очевидным в коде Visual Studio.

Ответ 5

В моем случае причиной были пробелы в конце строк .gitignore. Поэтому следите за пробелами в .gitignore!

Ответ 6

Я решил свою проблему следующим образом:

Прежде всего, я пользователь 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> Сохранить

В следующий раз, когда вы откроете тот же файл в блокноте по умолчанию, все должно быть правильно отформатировано. Попробуйте и посмотрите, работает ли это для вас.

Ответ 7

Работает ли git reset --hard для всех? Я не говорю, что это хорошее решение, это просто казалось, что я работаю в первый раз, когда пробовал.

Ответ 8

Для пользователей iOS игнорирование файлов в GitHub через .gitignore объясняется здесь:fooobar.com/questions/152084/...

Ответ 9

Я использовал что-то для генерации общего .gitignore для меня, и я столкнулся с этим. После прочтения ответа @Ozesh я открыл в VS Code, потому что в правом нижнем углу есть хороший индикатор, показывающий тип концов строки. Это был LF, поэтому я перешел на CRLF, как и предлагалось, но без игры в кости.

Затем я посмотрел рядом с окончаниями строки и заметил, что она была сохранена с использованием UTF16. Поэтому я восстановил с помощью UTF8 кодирования вуаля, это сработало. Я не думал, что CRLF имел значение, поэтому я, конечно, изменил его на LF, и он все еще работал.

Конечно, это не было проблемой OP, так как он уже зафиксировал файлы, поэтому они уже были проиндексированы, но подумал, что я поделюсь, если кто-то еще наткнется на это.

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