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

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

40 ответов

Решение

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

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

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

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

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

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

Если кажется, что 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
    

Без добавления еще одного коммита в ваш проект одной строки будет достаточно, чтобы сделать .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

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

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

./myproject/.gitignore

не в

./myproject/.git/.gitignore

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

      git update-index --skip-worktree <file_name>

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

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

1) $ Myfile = Get-Content..gitignore

2) $ Myfile = | Out-File -Кодирование "UTF8" .gitignore

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

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

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

echo "node_modules" > .gitignore

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

Пример:

echo node_modules > .gitignore

Уже есть несколько отличных ответов, но моя ситуация была утомительной. Я редактировал исходный код установленного программного обеспечения PLM (управление жизненным циклом продукта) на Win10 и впоследствии решил: "Мне, вероятно, следовало сделать это репозиторием git".

Так что опция кеширования не будет работать для меня напрямую. Публикация для других, которые, возможно, добавили систему управления версиями ПОСЛЕ выполнения кучи начальной работы И.gitignore не работает, НО, вы можете бояться потерять кучу работы, поэтому git rm --cached не для тебя.

! ВАЖНО: Это действительно потому, что я слишком поздно добавил git в "проект", который слишком велик и, кажется, игнорирует мой.gitignore. У меня НИКАКИХ коммитов никогда. Я могу уйти с этим:)

Сначала я только что сделал:

rm -rf .git
rm -rf .gitignore

Затем мне нужно было представить себе картину моих изменений. Опять же, это установочный продукт, в который я внес изменения. Слишком поздно для первой фиксации чистой основной ветки. Итак, мне нужен был список того, что я изменил с тех пор, как установил программу, добавив> changed.log к любому из следующих:

PowerShell

# Get files modified since date.
Get-ChildItem -Path path\to\installed\software\ -Recurse -File | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-02-25')} | Select-Object FullName

Баш

# Get files modified in the last 10 days...
find ./ -type f -mtime -10

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

Для начала, сейчас:

git init .
# Create and edit .gitignore

Мне пришлось сравнить мой измененный список с растущим.gitignore, запустив git status поскольку я улучшил его, но мои правки в.gitignore читаются по мере того, как я иду.

Наконец, у меня есть список желаемых изменений! В моем случае это шаблон - некоторые темы работают вместе с несколькими конфигурациями xml, специфичными для запуска системы разработки против этого программного обеспечения, которое я хочу поместить в репозиторий, чтобы другие разработчики могли захватить и внести свой вклад... Это будет наша основная ветка, поэтому совершая, подталкивая и, наконец, РАЗВИВАЯСЬ ​​на новую работу!

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

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

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

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

Моя проблема была (как предположил ОП) в поврежденном файле.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.

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

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

Короче:

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

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

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

Плохой:

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

И т.п.

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

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

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


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

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

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

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

Я создал.gitignore, используя echo "...">. Gitignore в Powershell в Windows, потому что он не позволяет мне создавать его в Проводнике.

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

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

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

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

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

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

/*
!/content/

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

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

/*
!/content/
!.gitignore

Я видел, что некоторые из вас уже ответили на этот вопрос, но я не знаю, ясно ли это было сказано. В моем случае проблема заключалась в создании файла .gitignore с помощью команды echo. В этом случае кодировка файла была изменена, и мне пришлось открыть текстовый файл, нажать «Сохранить как» и изменить кодировку на нижней вкладке на UTF-8. При использовании сенсорной команды для создания файла и редактировании его содержимого с помощью текстового редактора проблем с .gitignore не возникало.

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

Это не сработало и было проигнорировано git:

"db.sqlite3"
"tdd_venv/"

Это сработало отлично:

/db.sqlite3
/tdd_venv/

Я также проверил кодировку своего файла в Windows с помощью Notepad++. Кодировка была установлена ​​на UTF-8.

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

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

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

Вместо этого создайте текстовый документ, откройте его в Notepad++ и сохраните как.gitignore

Обязательно выберите Все типы (*.*) Из раскрывающегося списка при сохранении.


Или в gitbash просто используйте touch .gitignore

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

    git rm -r -f "folder or files insides"
Другие вопросы по тегам