.gitignore игнорируется Git

Мой файл .gitignore похоже, игнорируется Git - может .gitignore файл .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/ не появлялись в списке неотслеживаемых файлов.

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

Ответ 1

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

Таким образом, я переписал файл на своем компьютере с Linux, и когда я вытащил его обратно в Windows, он отлично работает! Ура!

Ответ 2

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

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

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

git rm -r --cached .
git add .
git commit -m "fixed untracked files"

Ответ 3

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

  • Возможно, существует глобальный файл .gitignore который может помешать вашему локальному.
  • Когда вы добавляете что-то в файл .gitignore, попробуйте это:

    git add [uncommitted changes you want to keep] && git commit
    git rm -r --cached .
    git add .
    git commit -m "fixed untracked files"
    
  • Если вы удалили что-то из файла .gitignore, и описанные выше шаги могут не сработать, если вы обнаружили, что вышеуказанные действия не работают, попробуйте следующее:

    git add -f [files you want to track again]
    git commit -m "Refresh removing files from .gitignore file."
    
    // For example, if you want the .java type file to be tracked again,
    // The command should be:
    //     git add -f *.java
    

Ответ 4

Сначала скопируйте текущие изменения или вы потеряете.

git rm . -r --cached
git add .
git commit -m "fixed untracked files"

Ответ 5

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

git rm -r --cached debug.log nbproject

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

Ответ 6

Другая причина этой проблемы - пробелы или табуляции перед оператором:

Пример:

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

И, как отмечено в комментарии ниже, пробел также может быть проблемой:

# Be aware of the following:
notWorkingIgnore.* #<-Space
workingIgnore.*#<-Nospace

Ответ 7

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

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

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

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

Ответ 8

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

процесс:

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

Ответ 9

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

echo .idea/ >> .gitignore
git init

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

Ответ 10

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

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

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

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

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

Ответ 11

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

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

./myproject/.gitignore

Не в

./myproject/.git/.gitignore

Ответ 12

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

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

Ответ 13

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

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

echo "node_modules" > .gitignore

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

Пример:

echo node_modules > .gitignore

Ответ 14

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

$Myfile = Get-Content .\.gitignore'
$Myfile | Out-File -Encoding "UTF8" .gitignore

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

Ответ 15

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

<Your-project-folder>\.git\info

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

Ответ 16

У меня была эта проблема с файлом .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.

Ответ 17

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

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

# ...

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

[email protected] ~/project/myproject $ xxd -b .gitignore
00000000: 11111111 11111110 00100011 00000000 00100000 00000000  ..#. .
00000006: 01000010 00000000 01110101 00000000 01101001 00000000  B.u.i.

Ответ 18

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

Плохой:

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

И т.п.

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

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

Ответ 19

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

Visual Studio 2013 игнорирует ваш файл .gitignore?

Короче:

  • Закройте Visual Studio.
  • Перейдите в вашу папку .git
  • Удалить ms-persist.xml
  • Перезапустите Visual Studio

Ответ 20

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

Окна:

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

Linux:

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

Ответ 21

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

    git rm -r -f "folder or files insides"

Ответ 22

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

foo/bar # The bar file contains sensitive data so we don't want to make this public

Итак, если у вас есть такие комментарии, измените их следующим образом:

# The bar file contains sensitive data so we don't want to make this public
foo/bar

Ответ 23

Также возможно, что вы отредактировали файл .gitignore с помощью команды sudo. Я столкнулся с той же проблемой, и при выполнении команд: git status я все еще мог видеть файлы, которые "должны быть проигнорированы".

После редактирования с помощью nano.gitignore вместо sudo nano.gitignore я мог видеть правильное отражение.

Ответ 24

Я создал .gitignore, используя echo "..." >.gitignore в PowerShell в Windows, потому что он не позволяет мне создавать его в Windows Explorer.

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

Ответ 25

Другая возможная причина - несколько экземпляров клиентов Git, запущенных одновременно. Например, "git shell" + "GitHub Desktop" и т.д.


Это случилось со мной. Я использовал "GitHub Desktop" в качестве основного клиента, и он игнорировал некоторые новые настройки .gitignore: commit after commit:

  1. Вы что-то делаете.
  2. Далее, commit: игнорирует настройки .gitignore. Фиксация включает в себя множество временных файлов, упомянутых в .gitignore.
  3. Очистить кеш Git; проверьте, является ли .gitignore UTF-8; удалить файлы → зафиксировать → переместить файлы назад; пропустить один коммит - ничего не помогло.

Причина: редактор кода Visual Studio работал в фоновом режиме с тем же открытым хранилищем. Visual Studio Code имеет встроенный элемент управления Git, и это создает некоторые конфликты.

Решение: перепроверьте несколько скрытых клиентов Git и одновременно используйте только один клиент Git, особенно при очистке кэша Git.

Ответ 26

У меня тоже такая же проблема на Ubuntu, я создал .gitignore из терминала, и он работает для меня

touch.gitignore

Ответ 27

У меня была небольшая проблема с этим. Мне удалось зайти на сайт www.GitHub.com/project, удалить файл с помощью пользовательского интерфейса и добавить это изменение в главное хранилище.

Похоже, я добавил файл в репозиторий до того, как сделал.gitignore. Кажется, это работает.

Ответ 28

Если вы пользователь Notepad++, попробуйте сделать следующее:

Откройте файл .gitignore с помощью Notepad++ и выполните:

Меню Правка → Преобразование EOL → Формат Windows → Сохранить.

Попробуйте снова использовать git status и посмотрите, работает ли он для вас.

Я разместил ответ на подобный вопрос здесь.

Ответ 29

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

/*
!/content/

Теперь это, очевидно, означает, что я также говорю Git игнорировать сам файл .gitignore. Что не было проблемой, пока я не отслеживал файл .gitignore. Но в какой-то момент я зафиксировал сам файл .gitignore. Это привело к тому, что файл .gitignore был должным образом проигнорирован.

Поэтому добавление еще одной строки исправило это:

/*
!/content/
!.gitignore

Ответ 30

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

/foo/bar/c.png # this image should be ignored

Размещение комментария в отдельной строке, таким образом, исправило его:

# this image should be ignored:
/foo/bar/c.png