.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), вы можете проверить следующие советы:
- вы должны обратить внимание на глобальный файл gitignore, который иногда может повлиять на ваш gitignore.
когда вы что-то добавить .gitignore файл, как человек, который ответил этот вопрос первый:
git rm -r --cached . git add . git commit -m "fixed untracked files"
- при удалении что-то от .файла.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оказывает воздействие--если файл был в кодировке Юникод, он был проигнорирован, если он был в формате 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
Как и в других решениях, сначала зафиксируйте и имейте в виду, что вы потеряете любые незакрепленные изменения.
У меня были лучшие результаты с этим:
git rm -r --cached . git reset HEAD --hard git statusобратите внимание, что статус теперь не должен иметь измененных файлов.
все ответы здесь на самом деле обходные пути. Вам нужно создать .gitignore файл перед запуском
git init, иначеgitникогда не будет знать, что вам нужно игнорировать эти файлы, потому что они уже были отслежены.echo .idea/ >> .gitignore git initесли вы разрабатываете на ежедневной основе, я советую вам добавить ваши привычные игнорируемые файлы в папку . Вот так,
gitуже будете знать, какие файлы Вы (имеется в виду "пользователь", так как это файл в вашем домашнем каталоге) обычно игнорировать.
также проверить каталог, где тебя положить .gitignore Он должен быть в корень вашего проекта:
./myproject/.gitignoreне в
./myproject/.git/.gitignore
в моем случае, это потому, что файлы уже существуют в репозитории, и я пытаюсь игнорировать его.
вот что я сделал, чтобы исправить проблему:
- скопируйте файлы во временную папку
- удалить их из папки проекта.
- зафиксируйте изменения, которые удаляют эти файлы из РЕПО
- повторно добавил Эти файлы в папку моего проекта
к тому времени любые изменения, которые я сделал в этих файлах, были игнорируемый.
Я думаю, что вы не можете игнорировать файлы, которые уже существуют на репо.
есть еще одна проблема с
.gitignoreЭто может произойти, особенно для пользователя windows, git не нравится, когда вы называете.gitignore(например,unity.gitignore). Вы всегда будете хотеть назвать его.gitignore, или на windows,.gitignore.как Windows думает, что вы пытаетесь переименовать его без имени.
Я просто столкнулся с этим вопросом. Содержание внутри меня .файл gitignore продолжал появляться в списке неотслеживаемых файлов.
я использовал это, чтобы создать файл ignore:
echo "node_modules" > .gitignoreоказывается, что двойные котировки были причиной проблемы для меня. Я удалил файл ignore, а затем снова использовал команду без кавычек, и она работала так, как ожидалось. Мне не нужно было возиться с кодировкой файла. Я нахожусь на машине 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
Эхо "*~" >> .gitignoreEtc.
проблема заключалась в том, что эта команда не помещает правильный маркер конца строки для Git для распознавания новых строк (либо CR, либо CR+LF, когда git ожидает другой.) Я решил проблему, вручную заменив каждую новую строку в vim (vim to the rescue!) и это сработало отлично.
попробуйте отредактировать ваш .gitignore в Notepad++ или vim (в идеале), даже если файл выглядит так, как будто он отформатирован правильно, попробуйте заменить новые строки. Звучит странно, я знаю, но работал на меня. : D
у меня была эта проблема, с А.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 на самом деле ищет папку, но символическая ссылка-это file, поэтому моя папка lib не игнорируется.я исправил это путем замены
lib/ext/bylib/extна мой .gitignore.
специально для пользователей Windows: Если у вас есть неотслеживаемые файлы и очистка/удаление кэшированных файлов не работает. Попробуйте открыть powershell и преобразовать его .gitignore файл в кодировке UTF-8.
1)$Myfile = Get-Content ..gitignore
2)$Myfile = | Out-File-Encoding "UTF8" .gitignore
нужно только сделать это один раз, чтобы закодировать .gitignore файл для этого каталога, и так как файл затем кодируется правильно всякий раз, когда вы редактируете файл в в будущем это должно сработать. Я считаю, что это связано с глюком, когда GitHub не собирается читать кодировку non UTF-8 для a .файла.gitignore Насколько мне известно, эта проблема еще не решена для Windows. Не слишком большое дело, просто боль для отладки, когда он не работает.
моя проблема была (как предложил ОП) коррумпированной .файла.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.
одна вещь, чтобы также посмотреть, это вы сохраняете ваш .gitignore файл с правильными окончаниями строк?
WINDOWS: Если вы используете его в windows, вы сохраняете его с окончаниями строк windows? Не все программы будут делать это по умолчанию, notepad++ и многие PHP-редакторы по умолчанию для окончаний строк linux, поэтому файлы будут совместимы с сервером. Один простой способ проверить это-открыть файл в блокноте windows. Если все отображается в одной строке, то файл был сохранен с помощью linux line окончания.
LINUX: Если у вас возникли проблемы с файлом, работающим в среде linux. Откройте файл в Редакторе, таком как emacs или nano. Если вы видите какие-либо непечатаемые символы, то файл был сохранен с окончаниями строк windows.
ок, так что в моем случае принятое решение не сработало, а то, что сработало описано здесь:
https://ericnelson.wordpress.com/2014/06/21/is-visual-studio-2013-ignoring-your-gitignore-file/
короче:
- Закрыть Visual Studio.
- перейдите к вашей .git folder
- удалить 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 и удалите файл с пользовательским интерфейсом, и добавьте это изменение в мастер-РЕПО.
похоже, я добавил файл в репо, прежде чем я сделал .gitignore. Это, кажется, работает.
Если вы являетесь пользователем Notepad++, попробуйте сделать следующее:
открыть свой .gitignore файл с помощью Notepad++ и сделать:
редактировать > преобразование EOL > формат Windows > сохранить
попробуйте снова использовать статус git и посмотреть, сработало ли это для вас.
Я опубликовал ответ на аналогичный вопрос здесь.
для меня это была еще одна проблема. Мой. gitignore настроен игнорировать все, кроме вещей, которые я говорю ему не игнорировать. Вот такие:
/* !/content/теперь это, очевидно, означает, что я также говорю git игнорировать .сама гитюдного. Это не было проблемой, пока я не отслеживал .gitignore. Но в какой-то момент я совершил .сама гитюдного. Это потом привело к тому .gitignore должным образом игнорируется.
Так что добавление еще одной строки исправлено это:
/* !/content/ !.gitignore
Comments