Почему Git не игнорирует мой указанный файл? - PullRequest
137 голосов
/ 30 сентября 2010

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

.gitignore содержимое файла:

sites/default/settings.php

Ответы [ 10 ]

260 голосов
/ 30 сентября 2010

Убедитесь, что ваш .gitignore находится в корне рабочего каталога, и в этом каталоге запустите git status и copy путь к файлу из вывода состояния и вставьте его в .gitignore.

Если это не сработает, то, скорее всего, ваш файл уже отслеживается Git. Вы можете подтвердить это с помощью вывода git status. Если файл отсутствует в разделе «Файлы без отслеживания» , он уже отслеживается Git и игнорирует правило из файла .gitignore.

Причиной игнорирования файлов в Git является то, что они не будут добавлены в хранилище. Если вы ранее добавили файл, который хотите игнорировать, то он будет отслеживаться Git, и соответствующие правила игнорирования будут пропущены. Git делает это, так как файл уже является частью репозитория.

Для того, чтобы фактически игнорировать файл, вам нужно отследить его и удалить из хранилища. Вы можете сделать это, используя git rm --cached sites/default/settings.php. Это удаляет файл из хранилища без физического удаления файла (это то, что делает --cached). После внесения этого изменения файл будет удален из хранилища, и его игнорирование должно работать правильно.

88 голосов
/ 14 августа 2011

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

git update-index --assume-unchanged sites/default/settings.php
35 голосов
/ 30 сентября 2010

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

Если вы набрали git add ., и файл был добавлен в индекс, .gitignore вам не поможет. Вам нужно будет сделать git rm sites/default/settings.php, чтобы удалить его, и тогда он будет проигнорирован.

10 голосов
/ 10 января 2018

У меня была такая же проблема. Файлы, определенные в .gitingore, которые отображаются как неотслеживаемые при запуске git status.

Причина в том, что файл .gitignore был сохранен в кодировке UTF-16LE, а не в кодировке UTF8.

После изменения кодировки файла .gitignore на UTF8 у меня все заработало.

2 голосов
/ 29 июня 2018

Что я сделал, чтобы проигнорировать файл settings.php :

  1. git rm - кэшированные сайты / default / settings.php
  2. commit(до этого не работал)
  3. вручную удалил сайты / default / settings.php (это помогло)
  4. git add.
  5. commit (игнорируется успешно)

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

1 голос
/ 12 октября 2017

Убедитесь, что .gitignore не имеет расширения !!Это не может быть .gitignore.txt, в Windows просто назовите файл .gitignore.и это будет работать.

1 голос
/ 30 сентября 2010

Я только что попробовал это с git 1.7.3.1, и получил структуру вроде:

repo/.git/
repo/.gitignore
repo/sites/default/settings.php

, где repo, таким образом, является «корнем», упомянутым выше (я бы назвал его корнем вашего рабочего дерева), а .gitignore содержит только sites/default/settings.php, игнорирование работает для меня (и не важно .gitignore добавляется в репо или нет). Это соответствует вашему макету репо? Если нет, то чем отличается?

0 голосов
/ 23 мая 2019

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


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

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

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

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

0 голосов
/ 08 апреля 2019

Есть примеры, например Файлы конфигурации приложения, которые я хочу отслеживать в 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-неизмененный файл / в / ignore.php

Имеет контракт с git, в котором: пользователь обещает не изменять файл и позволяет Git предположить, что файл рабочего дерева соответствует тому, что записано в индексе.

Однако я меняю содержимое файлов, поэтому в моем случае --skip-worktree - лучший вариант.

На веб-сайте Toshiharu Nishina было дано отличное объяснение пропуска рабочего дерева и предположения без изменений: Игнорировать файлы, уже управляемые с помощью Git локально

0 голосов
/ 13 февраля 2018

На случай, если кто-нибудь в будущем столкнется с той же проблемой, что и я:

Если вы используете трюк

*
!/**/
!*.*

для удаления бинарных файлов без расширения, убедитесь, что ВСЕдругие линии gitignore НИЖЕ.Git будет читать из .gitignore сверху, поэтому, несмотря на то, что в моем gitignore было «test.go», оно было первым в файле и стало «unignored» после

!*.*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...