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