Я добавил следующую строку в .gitignore но когда я .gitignore git status он показывает файл как неподготовленный файл. В чем проблема? Все остальные шаблоны работают хорошо.
 .gitignore файла .gitignore:
sites/default/settings.php
 Я добавил следующую строку в .gitignore но когда я .gitignore git status он показывает файл как неподготовленный файл. В чем проблема? Все остальные шаблоны работают хорошо.
 .gitignore файла .gitignore:
sites/default/settings.php
 Убедитесь, что ваш .gitignore находится в корне рабочего каталога, и в этом каталоге запустите git status скопируйте путь к файлу из вывода статуса и вставьте его в .gitignore.
 Если это не работает, то вполне вероятно, что ваш файл уже отслеживается Git. Вы можете подтвердить это через вывод git status. Если файл не указан в разделе "Файлы без отслеживания", то он уже отслеживается Git и будет игнорировать правило из файла .gitignore.
Причиной игнорирования файлов в Git является то, что они не будут добавлены в хранилище. Если вы ранее добавили файл, который хотите игнорировать, то он будет отслеживаться Git, и соответствующие правила игнорирования будут пропущены. Git делает это, так как файл уже является частью репозитория.
 Чтобы на самом деле игнорировать файл, вы должны распаковать его и удалить из репозитория. Вы можете сделать это, используя git rm --cached sites/default/settings.php. Это удаляет файл из хранилища без физического удаления файла (это то, что --cached). После внесения этого изменения файл будет удален из хранилища, и игнорирование его должно работать правильно.
Я столкнулся с этим, это старый вопрос, но я хочу, чтобы этот файл отслеживался, но не отслеживал его на определенных рабочих копиях, чтобы сделать это, вы можете запустить
git update-index --assume-unchanged sites/default/settings.php
.gitignore будет игнорировать файлы, которые вы еще не добавили в ваш репозиторий.
Если вы сделали git add ., и файл был добавлен в индекс, .gitignore вам не поможет. Вам нужно будет сделать git rm sites/default/settings.php, чтобы удалить его, а затем он будет проигнорирован.
 У меня такая же проблема. Файлы, определенные в .gitingore где перечислены как неотслеживаемые файлы при запуске git status.
 Причина была в том, что файл .gitignore был сохранен в UTF-16LE, а не в кодировке UTF8.
 После изменения кодировки файла .gitignore на UTF8 у меня все .gitignore.
Что я сделал, чтобы игнорировать файл settings.php успешно:
Я думаю, что если в Git есть зафиксированный файл, игнорирование не работает должным образом. Просто удалите файл и подтвердите. После этого он будет игнорироваться.
Я просто попробовал это с помощью git 1.7.3.1 и задал такую структуру, как:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
 где repo, таким образом, является упомянутым выше "корнем" (я бы назвал его корнем вашего рабочего дерева), а .gitignore содержит только sites/default/settings.php, игнорирование работает для меня (и не имеет значения, .gitignore добавляется к репо или нет). Соответствует ли это вашему репо-макету? Если нет, что отличается?
Убедитесь, что .gitignore не имеет расширения! Это не может быть .gitignore.txt, в окнах просто указывается файл .gitignore. и он будет работать.
На всякий случай у кого-нибудь в будущем возникнет та же проблема, что и у меня:
Если вы используете
*
!/**/
!*.*
Хитрость для удаления двоичных файлов без расширения, убедитесь, что все остальные строки gitignore находятся ниже. Git будет читать из .gitignore сверху, поэтому, несмотря на то, что у меня в gitignore было "test.go", оно было первым в файле и стало "игнорируемым" после
!*.*
Есть примеры, например, файлы конфигурации приложения, которые я хочу отслеживать в 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 - лучший вариант.
Сайт Toshiharu Nishina предоставил отличное объяснение skip-worktree против предположения без изменений: игнорировать файлы, уже управляемые с помощью Git локально
Другая возможная причина - несколько экземпляров git-клиентов, запущенных одновременно. Например "git shell" + "GitHub Desktop" и т.д.
Это случилось со мной, я использовал "GitHub Desktop" в качестве основного клиента и игнорировал некоторые новые настройки .gitignore: commit after commit:
Причина: редактор кода Visual Studio работал в фоновом режиме с тем же открытым хранилищем. VS Code имеет встроенное управление git, и это создает некоторые конфликты.
Решение: перепроверьте несколько скрытых клиентов git и используйте только один клиент git одновременно, особенно при очистке кэша git.