Я добавил следующую строку в .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.