Gitignore игнорируется Git

Кажется, что мой файл .gitignore игнорируется Git - может ли файл .gitignore быть поврежден? Какой формат файла, локаль или культура ожидают Git?

Мой .gitignore:

# This is a comment
debug.log
nbproject/

Вывод из git status:

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       debug.log
#       nbproject/
nothing added to commit but untracked files present (use "git add" to track)

Я хотел бы, чтобы debug.log и nbproject /не отображались в списке не отслеживаемых файлов.

Где я должен начать искать, чтобы исправить это?

Комментарии к вопросу (9)

Даже если вы до сих пор не отслеживали файлы, Git, похоже, может «знать» о них даже после того, как вы добавите их в «.gitignore».

ПРИМЕЧАНИЕ: Сначала зафиксируйте ваши текущие изменения, иначе вы их потеряете.

Затем выполните следующие команды из верхней папки вашего репозитория Git:

git rm -r --cached .
git add .
git commit -m "fixed untracked files"
Комментарии (29)

Если кажется, что Git не замечает изменений, которые вы внесли в файл .gitignore, вы можете проверить следующие моменты:

  • Может быть глобальный файл .gitignore, который может помешать вашему локальному

  • Когда вы добавляете что-то в файл .gitignore, попробуйте это:

      git add [нефиксированные изменения, которые вы хотите сохранить] & & Git Commerit
      git rm -r --cached .
      Git Add .
      git commit -m "фиксированные не отслеживаемые файлы"
  • Если вы удалите что-то из файла .gitignore, и вышеуказанные шаги могут не сработать, если вы обнаружили, что вышеуказанные шаги не работают, попробуйте это :

      git add -f [файлы, которые вы хотите отслеживать снова]
      git commit -m "Обновить удаление файлов из файла .gitignore.«
    
      // Например, если вы хотите, чтобы файл типа .java отслеживался снова,
      // Команда должна быть:
      // git add -f * .java
Комментарии (12)
Решение

Исправлено. Хорошо, я создал файл .gitignore в Блокноте в Windows, и он не работал. Когда я просматривал файл .gitignore в Linux, он выглядел как организованный бред - возможно, Блокнот записал Unicode, а не ASCII или что-то еще 8-битное.

Поэтому я переписал файл в своем Linux-боксе, и когда я вернул его обратно в Windows, он работает нормально! Ура!

Комментарии (15)

Без добавления еще одного коммита в ваш проект одной строки будет достаточно, чтобы заставить .gitignoreработать так, как предполагается:

git rm -r --cached debug.log nbproject

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

Комментарии (4)

Другой причиной этого вопроса являются пробелы или вкладки перед оператором:

Пример:

# Be aware of the following:
 notWorkingIgnore.*
workingIgnore.*

И, как указано в комментарии ниже, трейлинг-пространство также может быть проблемой:


# Be aware of the following:
notWorkingIgnore.* #
Комментарии (5)

Как и в случае с другими решениями, совершайте первые обязательства и имейте в виду, что вы потеряете любые незафиксированные изменения.

У меня были лучшие результаты с этим:

git rm -r --cached .
git reset HEAD --hard
git status

Обратите внимание, что в статусе не должно быть никаких измененных файлов.

Комментарии (1)

Я заметил, что кодировка .gitignore имела эффект - если файл был Unicode, он игнорировался, если это был ASCII, это не было.

Процесс:

  1. Проверить статус: PS > git status
  2. Создайте функцию для Get-FileEncoding
  3. Проверьте кодировку .gitignore: PS > Get-FileEncoding .gitignore
  4. Изменить кодировку на ASCII: PS > Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)
  5. Подтвердите: PS > git status
Комментарии (2)

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

Вот что я сделал, чтобы решить проблему:

  • Скопируйте файлы во временную папку
  • Удалить их из папки моего проекта.
  • Зафиксируйте изменения, которые удаляют эти файлы из хранилища
  • Переувеличил эти файлы в папку моего проекта

К тому времени любые изменения, которые я внес в эти файлы, были проигнорированы.

Я думаю, что вы не можете игнорировать файлы, которые уже существуют в хранилище.

Комментарии (1)

Все ответы здесь на самом деле обходные пути. Вам нужно создать файл .gitignore , прежде чем вы запустите git init. В противном случае git никогда не узнает, что вам нужно игнорировать эти файлы, потому что они уже были отслежены.

echo .idea/ >> .gitignore
git init

Если вы разрабатываете ежедневно, я советую вам добавлять ваши обычные игнорируемые файлы в файл ~/.gitignore_global. Таким образом, git уже будет знать, какие файлы вы (что означает «ваш пользователь», поскольку это файл в вашем домашнем каталоге) обычно игнорируете.

Комментарии (1)

Также проверьте каталог , куда вы положили .gitignore.

Это должно быть в корне вашего проекта :

./myproject/.gitignore

Не в

./myproject/.git/.gitignore
Комментарии (0)

Специально для пользователей Windows: если у вас есть неотслеживаемые файлы и очистка / удаление кэшированных файлов не работает. Попробуйте открыть PowerShell и преобразовать файл .gitignore в кодировку UTF-8:

`PowerShell $ Myfile = Get-Content .\ .gitignore $ Myfile | Out-File - кодирование "UTF8" .gitignore



Это нужно сделать только один раз, чтобы кодировать файл .gitignore для этого каталога, и поскольку файл затем кодируется правильно, всякий раз, когда вы редактируете файл в будущем, он должен работать. Я полагаю, что это связано с тем, что GitHub не собирается читать кодировку не UTF-8 для файла .gitignore. Насколько я знаю, эта проблема еще не решена для Windows. Это не слишком большая сделка, просто боль отлаживать, когда она не работает.
Комментарии (0)

Может возникнуть еще одна проблема с .gitignore, особенно для пользователя Windows. Git не нравится, когда вы называете .gitignore (например, unity.gitignore).

Вы хотите всегда называть его .gitignore или в Windows .gitignore.как Windows думает, что вы пытаетесь переименовать его без имени файла.

Комментарии (0)

Я только что столкнулся с этой проблемой. Содержимое в моем файле .gitignore продолжало появляться в списке не отслеживаемых файлов.

Я использовал это, чтобы создать файл игнорирования:

echo "node_modules" > .gitignore

Оказывается, двойные цитаты вызывали у меня проблему. Я удалил файл игнорирования, а затем снова использовал команду без кавычек, и она работала, как и ожидалось. Мне не нужно было связываться с кодировкой файла. Я на компьютере с Windows & nbsp; 10, использующем Cmder.

Пример:

echo node_modules > .gitignore
Комментарии (1)

Для меня ни один из предыдущих ответов не сработал. Мне пришлось скопировать текст .gitignore в файл exclude.txt, найденный в

\.git\info

После этого обновите ваши изменения, и все файлы без отслеживания исчезнут. Совершите как обычно.

Комментарии (0)

Моя проблема была (как предложил OP) поврежденным файлом .gitignore. Я не верил, что это было, и игнорировал возможность, пока все остальное не провалилось. Повреждение не отображалось в vi , но в начале файла было два байта, что привело к игнорированию файла .gitignore. Для меня они появились только тогда, когда я напечатал cat .gitignore, который показал:

��# Built application files
*.apk
*.ap_

# ...

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

user@dev ~/project/myproject $ xxd -b .gitignore
00000000: 11111111 11111110 00100011 00000000 00100000 00000000  ..#. .
00000006: 01000010 00000000 01110101 00000000 01101001 00000000  B.u.i.
Комментарии (2)

У меня была эта проблема с файлом .gitignore, содержащим эту строку:

lib/ext/

Я только что понял, что на самом деле этот каталог является символической ссылкой на папку где-то еще:

ls -la lib/ext/
lrwxr-xr-x 1 roipoussiere users 47 Feb  6 14:16 lib/ext -> /home/roipoussiere/real/path/to/the/lib

В строке lib / ext / Git фактически ищет папку , но символическая ссылка - это файл , поэтому моя папка lib не игнорируется.

Я исправил это, заменив lib / ext / `` наlib / ext` в моем файле .gitignore.

Комментарии (0)

У меня была та же проблема. Я считаю, что проблема была CR против. Расхождение CR + LF. Я спрятал вещи в своем .gitignore, используя CMD (в Windows & nbsp; 7) и следующую команду:

Плохой:

echo "file_to_be_ignored.py" >> .gitignore<br>
echo "*~" >> .gitignore

И т. Д.

Проблема заключалась в том, что эта команда не помещает правильный маркер конца строки для Git для распознавания новых строк (либо CR, либо CR + LF, когда Git ожидает другого). Я решил проблему, вручную заменив каждую новостную линию в Vim (Vim на помощь!) и это сработало отлично.

Попробуйте отредактировать свой .gitignore в Notepad ++ или Vim (в идеале). Даже если файл выглядит так, как будто он отформатирован правильно, попробуйте заменить новые строки. Это звучит странно, я знаю, но это сработало для меня. : D

Комментарии (0)

Хорошо, так что в моем случае принятое решение не сработало, и то, что сработало, описано здесь:

Короче говоря:

  • Закрыть Visual Studio.
  • Перейдите в папку .git
  • Удалить ms-persist.xml
  • Перезапустите Visual Studio
Комментарии (0)

На что также следует обратить внимание: сохраняете ли вы файл .gitignore с правильными окончаниями строки?

Windows:

Если вы используете его в Windows, сохраняете ли вы его с окончаниями строк Windows? Не все программы будут делать это по умолчанию; Блокнот ++ и многие редакторы PHP по умолчанию используют окончания строк Linux, поэтому файлы будут совместимы с сервером. Один простой способ проверить это - открыть файл в блокноте Windows. Если все отображается в одной строке, файл был сохранен с окончаниями строки Linux.

Linux:

Если у вас возникли проблемы с файлом, работающим в среде Linux, откройте файл в редакторе, таком как Emacs или nano. Если вы видите непечатаемые символы, файл был сохранен с окончаниями строк Windows.

Комментарии (0)

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

    git rm -r -f "folder or files insides"
Комментарии (0)