.gitignore не работает
У меня есть файл .gitignore в корне моего репо. Файл .gitignore имеет следующий шаблон, чтобы исключить скомпилированные файлы python и это единственная строка в файле.
*. Pyc
Теперь, когда я делаю следующее в корне репо.
- git init
- git добавить.
- git статус
Он показывает, что он по-прежнему отслеживает файл .pyc и пытается добавить его в качестве нового файла. См. Вывод ниже...
Информация о системе: Win 7, cygwin
Примечание. Эта проблема ЯВЛЯЕТСЯ ОЧЕНЬ не о том, что проигнорированный файл уже отслеживается. Также я попробовал как DOS, так и строку стиля Unit, заканчивающуюся в файле .gitignore.
git статус:
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: .gitignore
# new file: feedapp/__init__.py
# new file: feedapp/appconfig.py
# new file: feedapp/appconfig.pyc
Как устранить эту проблему дальше?
Ответы
Ответ 1
.gitignore
применяется только к файлам без следа. Если вы отслеживаете .pyc
, то .gitignore
не будет применяться. Удалите .pyc
с помощью git rm
, и в следующий раз, когда вы выполните git status
, он (и любые другие) не будет отображаться в списке неискоренированного файла и не будет автоматически добавлен.
В противном случае, если вам нужно проигнорировать файл, уже находящийся под управлением версии, обновите индекс, чтобы игнорировать изменения в файлах, уже находящихся под управлением версиями:
git update-index --assume-unchanged <files>
Для получения дополнительной информации см. git -update-index (1) Страница руководства, ответ на .gitignore файл не игнорируется и ответ на вопрос (GIT: Игнорирование файлов с контролируемой версией).
Ответ 2
man gitignore
:
Файл gitignore указывает намеренно ** неподписанные файлы **, которые git должен игнорировать. Обратите внимание, что все файлы gitignore действительно относятся только к файлам, которые уже не отслеживаются git
git rm file
остановит их. Я не могу найти способ удалить все проигнорированные файлы из репо.
Как вы отмечаете, файлы, как представляется, уже не существуют в репо. В этом случае поведение git
не соответствует ни документации, ни моему поведению, и я не могу вам помочь.
$ mkdir foo
$ cd foo
/home/ikegami/foo
$ mkdir feedapp
$ touch feedapp/__init__.py
$ touch feedapp/appconfig.py
$ touch feedapp/appconfig.pyc
$ echo '*.pyc' > .gitignore
$ git init
Initialized empty Git repository in /home/ikegami/foo/.git/
$ git add .
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: .gitignore
# new file: feedapp/__init__.py
# new file: feedapp/appconfig.py
#
$
Возможно, вы сделали
git init
git add .
echo '*.pmc' >> .gitignore
git init
git add .
в этом случае вы можете исправить проблему, используя
git rm --cached -r .
git add .
Ответ 3
Была та же самая проблема. Выяснилось, что "someText" > .gitignore создал файл с wierd-кодировкой. Изменил его на UTF-8, затем все работало нормально.
Ответ 4
У меня была точно такая же проблема - даже если я подготовлю файл .gitignore до того, как я впервые добавлю что-нибудь.
И я обнаружил, что проблема была в пустом пространстве в моем файле игнорирования.
НЕ добавляйте пробел в файл игнорирования и повторите попытку. Я думаю, все будет хорошо работать.
Удачи.
Ответ 5
Проверьте окончания строки в файле .gitignore. В репозитории OS X я использовал линии CR line. Все снова работало после переключения на LF.
perl -p -e 's/\r/\n/g' < .gitignore > .gitignore-new
mv .gitignore-new .gitignore
Консольные жокеи скорее всего захотят использовать sed
.
Справочная информация. Я скопировал свою рабочую копию из репозитория Windows после сбоя питания.