Я добавил следующую строку в .gitignore
:
sites/default/settings.php
но когда я набираю git status
, он показывает файл как неустановленный файл.
В чем проблема? Все остальные шаблоны работают хорошо.
Я добавил следующую строку в .gitignore
:
sites/default/settings.php
но когда я набираю git status
, он показывает файл как неустановленный файл.
В чем проблема? Все остальные шаблоны работают хорошо.
Убедитесь, что ваш .gitignore
находится в корне рабочего каталога, и в этом каталоге запустите git status
и скопируйте путь к файлу из вывода состояния и вставьте его в .gitignore
.
Если это не сработает, скорее всего, ваш файл уже отслеживается Git. Вы можете подтвердить это через вывод git status
. Если файл не указан в разделе Неотслеживаемые файлы, он уже отслеживается Git и игнорирует правило из файла .gitignore
.
Причина игнорирования файлов в Git заключается в том, что они не будут добавлены в репозиторий. Если вы ранее добавили файл, который хотите игнорировать, он будет отслеживаться Git, и соответствующие ему правила игнорирования будут пропущены. Git делает это, поскольку файл уже является частью репозитория.
Чтобы на самом деле проигнорировать файл, вы должны отменить его отслеживание и удалить из репозитория. Вы можете сделать это, используя git rm --cached sites/default/settings.php
. Это удаляет файл из репозитория без физического удаления файла (это то, что делает --cached
). После внесения этого изменения файл будет удален из репозитория, и его игнорирование должно работать правильно.
.git
и который сам является корнем репозитория. Например, когда вы клонируете репозиторий в /xy/
, тогда /xy/
является вашим рабочим каталогом с /xy/.git/
внутри.
- person poke; 30.09.2010
git add .
после git rm --cached
, чтобы правильно перестроить индекс.
- person Cooper; 05.01.2014
Я сталкиваюсь с этим, это старый вопрос, но я хочу, чтобы этот файл отслеживался, но не отслеживался на определенных рабочих копиях, для этого вы можете запустить
git update-index --assume-unchanged sites/default/settings.php
git update-index --skip-worktree filename
- person dwllama; 10.09.2020
.gitignore будет игнорировать только те файлы, которые вы еще не добавили в свой репозиторий.
Если вы сделали git add .
, и файл был добавлен в индекс, .gitignore вам не поможет. Вам нужно будет сделать git rm sites/default/settings.php
, чтобы удалить его, и тогда он будет проигнорирован.
git rm
должен сделать это, но он может попросить вас использовать опцию -f, которая удалит его из рабочего каталога. Я не понял этого, кроме как сделать копию файла, сделать git rm -f
, а затем восстановить копию.
- person jonescb; 01.10.2010
Пожалуйста, используйте эту команду
git rm -rf --cached .
git add .
Иногда файлы .gitignore не работают, даже если они правильные. Причина, по которой Git игнорирует файлы, заключается в том, что они не добавляются в репозиторий. Если вы ранее добавили файл, который хотите игнорировать, он будет отслеживаться Git, и любые пропущенные правила сопоставления будут пропущены. Git делает это, потому что файл уже является частью репозитория.
У меня такая же проблема. Файлы, определенные в .gitingore
, перечислены как неотслеживаемые файлы при запуске git status
.
Причина была в том, что файл .gitignore
был сохранен в кодировке UTF-16LE
, а не в кодировке UTF8
.
После изменения кодировки файла .gitignore
на UTF8
у меня все заработало.
Есть экземпляры, например. Файлы конфигурации приложения, которые я хочу отслеживать в git (поэтому .gitignore не будет работать), но которые мне нужно изменить для локальных настроек. Я не хочу, чтобы git управлял этими файлами или показывал их как измененные. Для этого я использую skip-worktree:
git update-index --skip-worktree path/to/file
Вы можете подтвердить, что файлы пропущены, перечислив файлы и проверив строки, начинающиеся с S для пропущенных.
git ls-files -v | grep ^S
Если в будущем вы захотите, чтобы git снова управлял файлом локально, просто запустите:
git update-index --no-skip-worktree path/to/file
У Мескалито выше был отличный ответ, который привел меня по правильному пути, но
git update-index --assume-неизменный файл/to/ignore.php
Имеет контракт с git, в котором: пользователь обещает не изменять файл и позволяет Git предположить, что рабочий файл дерева соответствует тому, что записано в индексе.
Однако я меняю содержимое файлов, поэтому в моем случае --skip-worktree лучше.
На веб-сайте Тошихару Нисина представлено отличное объяснение пропущенного рабочего дерева и предположенного без изменений: Игнорировать файлы, которые уже управляются с помощью Git локально
Что я сделал, чтобы успешно игнорировать файл settings.php:
Я думаю, что если в Git есть зафиксированный файл, то игнорирование не работает должным образом. Просто удалите файл и зафиксируйте. Потом будет игнорировать.
Еще одна возможная причина — несколько экземпляров git-клиентов, запущенных одновременно. Например, «git shell» + «GitHub Desktop» и т. д.
Это случилось со мной, я использовал «GitHub Desktop» в качестве основного клиента, и он игнорировал некоторые новые настройки .gitignore: фиксация после фиксации:
Причина: редактор Visual Studio Code работал в фоновом режиме с тем же открытым репозиторием. VS Code имеет встроенный элемент управления git, и это создает некоторые конфликты.
Решение: перепроверьте несколько скрытых клиентов git и используйте только один клиент git одновременно, особенно при очистке кеша git.
Убедитесь, что у .gitignore нет расширения!! Это не может быть .gitignore.txt, в Windows просто назовите файл .gitignore. и это будет работать.
Я попробовал большинство команд выше на терминале VS Code и получил такие ошибки, как:
fatal: pathspec '[dir]/[file]' did not match any files
Я открыл проект на GitHub Desktop и проигнорировал оттуда, и это сработало.
Я только что попробовал это с git 1.7.3.1 и получил такую структуру:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
где repo
таким образом это "корень" упомянутый выше (я бы назвал его корнем вашего рабочего дерева), а .gitignore
содержит только sites/default/settings.php
, у меня работает игнор (и не важно добавлен .gitignore
в репо или нет) . Соответствует ли это вашему макету репо? Если нет, то чем отличается?
На всякий случай, если у кого-то в будущем возникнет та же проблема, что и у меня:
Если вы используете
*
!/**/
!*.*
трюк для удаления двоичных файлов без расширения, убедитесь, что ВСЕ остальные строки gitignore находятся НИЖЕ. Git будет читать из .gitignore сверху, поэтому, хотя у меня был «test.go» в моем gitignore, он был первым в файле и стал «неигнорируемым» после
!*.*
Одна вещь, которую, я думаю, упустили в превосходных ответах здесь, - это существование if another *.gitignore* or multiple of them.
В одном случае я клонировал репозиторий и не мог понять, почему игнорируемый файл снова добавляется при запуске git add. Выяснилось, что в подпапке был другой .gitignore, и он переопределял файл в корневой папке.
/.gitignore
/some-folder/.gitignore
/some-folder/this-file-keeps-getting-staged
То
корень /.gitignore
игнорировал этот-файл-продолжает-постановку
То
/какая-то папка/.gitignore
не имеет спецификации игнорировать этот файл, который продолжает получать промежуточный файл.
Отсюда и проблема.
Одним из способов является простой поиск нескольких файлов .gitignore в иерархии. И выяснить правила, как они применяются.