.gitignore не работает

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

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

24 ответов


даже если вы не отслеживали файлы до сих пор, git, похоже, может "знать" о них даже после их добавления в .gitignore.

Примечание : сначала зафиксируйте текущие изменения, или вы их потеряете.

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

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

когда .файл gitignore не работает (добавление чего-то.gitignore файл или удаление чего-то из .gitignore file), вы можете проверить следующие советы:

  1. вы должны обратить внимание на глобальный файл gitignore, который иногда может повлиять на ваш gitignore.
  2. когда вы добавляете что-то.gitignore файл, как человек, который ответил этот вопрос первый:

    git rm -r --cached .
    git add .
    git commit -m "fixed untracked files"  
    
  1. при удалении что-то от .файла.gitignoreвышеуказанные шаги не работает. Вы можете попробовать это:
    git add -f "filetype"
    git commit -m "Refresh removing filetype from .gitignore file."

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


исправлено. Хорошо, я создал .файл gitignore в блокноте на windows, и он не работал. Когда я смотрел .файл gitignore в linux выглядел как организованная тарабарщина - возможно, Блокнот написал unicode, а не ascii или что-то еще 8-битное.

поэтому я переписал файл на моем linux box, и когда я вытащил его обратно в windows, он отлично работает! Ура!


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

git rm -r --cached debug.log nbproject

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


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

пример:

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

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

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

Я заметил, что кодировка .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

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

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

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

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


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

echo .idea/ >> .gitignore
git init

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


также проверить каталог, где тебя положить .гитюдного Он должен быть в корень вашего проекта:

./myproject/.gitignore

не в

./myproject/.git/.gitignore

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

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

  • скопируйте файлы во временную папку
  • удалите их из моей папки проекта.
  • зафиксируйте изменения, которые удаляют эти файлы из РЕПО
  • повторно добавил Эти файлы в мою папку проекта

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

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


есть еще одна проблема с .gitignore Это может произойти, особенно для пользователя windows, git не нравится, когда вы называете .gitignore (например,unity.gitignore). Вы всегда захотите назвать его .gitignore, или на windows,.gitignore.как Windows думает, что вы пытаетесь переименовать его без имени.


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

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

echo "node_modules" > .gitignore

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

пример:

echo node_modules > .gitignore


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

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

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


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

плохое:

Эхо "file_to_be_ignored.py" >> .gitignore
Эхо "*~" >> .gitignore

Etc.

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

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


у меня была эта проблема, с a .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/ by lib/ext на мой .гитюдного.


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

1)$Myfile = Get-Content ..gitignore

2)$Myfile = / Out-файл-кодировка "UTF8".gitignore

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


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

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

# ...

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

user@dev ~/project/myproject $ xxd -b .gitignore 
00000000: 11111111 11111110 00100011 00000000 00100000 00000000  ..#. .
00000006: 01000010 00000000 01110101 00000000 01101001 00000000  B.u.i.

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

WINDOWS: Если вы используете его в windows, вы сохраняете его с окончаниями строк windows? Не все программы будут делать это по умолчанию, notepad++ и многие редакторы php по умолчанию для Linux, поэтому файлы будут совместимы с сервером. Один из простых способов проверить это, является открытие файла в Windows notepad. Если все отображается в одной строке, то файл был сохранен в строке linux окончания.

LINUX: Если у вас возникли проблемы с файлом, работающим в среде linux. Откройте файл в Редакторе, таком как emacs или nano. Если вы видите какие-либо непечатаемые символы, то файл был сохранен с окончаниями строк windows.


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

https://ericnelson.wordpress.com/2014/06/21/is-visual-studio-2013-ignoring-your-gitignore-file/

короче:

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

надеюсь, что это поможет кому-то когда-нибудь


просто удалите папку или файл, которые ранее фиксировались в git, следуя команде, затем файл gitignore будет отражать правильные файлы.

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

The .файл 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

У меня была небольшая проблема с этим. Я смог пойти в www.GitHub.com/project и удалите файл с пользовательским интерфейсом и добавьте это изменение в мастер-РЕПО.

похоже, я добавил файл в репо, прежде чем я сделал .гитюдного. Кажется, это работает.


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

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

изменить > преобразование EOL > формат Windows > сохранить

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

Я опубликовал ответ на аналогичный вопрос здесь.


/*
!/content/

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

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

/*
!/content/
!.gitignore