Подтвердить что ты не робот

.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

Как устранить эту проблему дальше?

4b9b3361

Ответ 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 после сбоя питания.