У меня была та же проблема, потом я обнаружил, что вместо этого сохранил свой файл .gitignore на другом диске: face-palm:
Генри Чан
Это очень плохая идея - хранить вещи в своем хранилище и игнорировать их изменения.
Евгений Афанасьев
Ответы:
371
Убедитесь, что вы .gitignoreнаходитесь в корне рабочего каталога, и в этом каталоге запустите git statusи скопируйте путь к файлу из вывода состояния и вставьте его в .gitignore.
Если это не сработает, то, вероятно, ваш файл уже отслеживается Git. Вы можете подтвердить это через вывод git status. Если файл не указан в разделе «Файлы без отслеживания » , то он уже отслеживается Git и будет игнорировать правило из .gitignoreфайла.
Причиной игнорирования файлов в Git является то, что они не будут добавлены в хранилище. Если вы ранее добавили файл, который хотите игнорировать, то он будет отслеживаться Git, и соответствующие правила игнорирования будут пропущены. Git делает это, так как файл уже является частью репозитория.
Для того, чтобы фактически игнорировать файл, вы должны распаковать его и удалить из хранилища. Вы можете сделать это с помощью git rm --cached sites/default/settings.php. Это удаляет файл из хранилища без физического удаления файла (это то, что --cachedделает). После внесения этого изменения файл будет удален из хранилища, и его игнорирование должно работать правильно.
Что вы подразумеваете под «корнем рабочего каталога»? Каталог, в котором находится репозиторий .git?
Джонатан Леффлер
Рабочий каталог - это каталог, в котором расположен .gitкаталог, и который сам является корнем хранилища. Например, когда вы клонируете репозиторий, /xy/тогда /xy/ваш рабочий каталог /xy/.git/внутри.
тыкай
3
Иногда вам также нужно сделать git add .после, git rm --cachedчтобы правильно перестроить индекс.
Купер
Идея проверить это в git-статусе была блестящей. Я продолжал проверять это в Git Staging в Eclipse, и путь был неверным. Спасибо!
Уолла
1
Мне нужно было добавить флаг -r (рекурсивный), так как я тоже проверял вложенные папки. В моем случае я перешел в корень своей папки git, а затем выполнил команду git rm --cached -r .vs /, где vs была папка верхнего уровня, которую я хотел удалить из отслеживания.
Devology Ltd
107
Я сталкиваюсь с этим, это старый вопрос, но я хочу, чтобы этот файл отслеживался, но не отслеживал его на определенных рабочих копиях, для этого вы можете запустить
Это на самом деле ответ, который я искал. Все остальные ответы предполагают, что файл был добавлен с помощью git add, что не всегда так. В Acquia Cloud файл .gitignore должен игнорировать settings.php (например), но этот файл включается в первый коммит. Не открывая файл, просто удаляет его из репозитория, поэтому удаляя его с живого сайта ...
PatrickS
Помог мне тоже - спасибо! Проголосовал. Я подозреваю, что, хотя это применимо только к локальному репозиторию git и не сохранится, если его перенести на удаленный компьютер и клонировать другими разработчиками?
Иван
1
Да, это только местный.
Мескалито
41
.gitignore будет игнорировать только те файлы, которые вы еще не добавили в свой репозиторий.
Если вы сделали это git add ., и файл был добавлен в индекс, .gitignore вам не поможет. Вам нужно будет сделать, git rm sites/default/settings.phpчтобы удалить его, и тогда он будет проигнорирован.
спасибо. Но как удалить файл только из индекса, а не из рабочего каталога?
Nick.h
1
git rmдолжен сделать это, но он может попросить вас использовать опцию -f, которая удалит его из рабочего каталога. Я не понял этого, кроме как сделать копию файла, сделать, git rm -fа затем восстановить копию.
Jonescb
То же самое, чувак. Сделайте копию где-нибудь, удалите ее, подтвердите удаленное состояние, добавьте файлы обратно и посмотрите, как они теперь игнорируются.
Евгений Афанасьев
18
Пожалуйста, используйте эту команду
git rm -rf --cached .
git add .
Иногда файлы .gitignore не работают, даже если они правильные. Причина, по которой Git игнорирует файлы, заключается в том, что они не добавляются в хранилище. Если вы добавили файл, который хотите игнорировать ранее, он будет отслеживаться Git, и все пропущенные соответствующие правила будут пропущены. Git делает это, потому что файл уже является частью репозитория.
Я думаю, что если в 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 - лучший вариант.
Другая возможная причина - несколько экземпляров git-клиентов, работающих одновременно . Например "git shell" + "GitHub Desktop" и т. Д.
Это случилось со мной, я использовал «GitHub Desktop» в качестве основного клиента и игнорировал некоторые новые настройки .gitignore: commit after commit:
Вы что-то делаете.
Далее, commit: игнорирует настройки .gitignore. Commit включает в себя множество временных файлов, упомянутых в .gitignore.
Очистить кеш git; проверьте, является ли .gitignore UTF8; удалить файлы -> зафиксировать -> переместить файлы назад; пропустить 1 коммит - ничего не помогло.
Причина : редактор кода Visual Studio работал в фоновом режиме с тем же открытым хранилищем. VS Code имеет встроенное управление git, и это создает некоторые конфликты.
Решение : перепроверьте несколько скрытых клиентов git и используйте только один клиент git одновременно, особенно при очистке кэша git.
где, repoтаким образом, «корень», упомянутый выше (я бы назвал его корнем вашего рабочего дерева), и .gitignoreсодержит только sites/default/settings.php, игнорирование работает для меня (и не имеет значения, .gitignoreдобавлен ли он в репозиторий или нет). Это соответствует вашему макету репо? Если нет, то чем отличается?
Да. Это точно так же, как ваш. Но не работает. Все другие шаблоны работают. Как я уже сказал, проблема, безусловно, связана с папкой settings.php.
Nick.h
Я чувствую, что это очень плохая идея - хранить вещи в вашем хранилище и игнорировать их изменения.
Евгений Афанасьев
@YevgeniyAfanasyev за исключением таких вещей, как вывод компиляции, пользовательские настройки IDE, все другие временные файлы, сгенерированные вашей цепочкой инструментов ...
Крис Ф. Кэрролл
Я имел в виду сохранение коммитов в репозитории, а не только файлов, находящихся в папке проекта. Зачем вам нужны временные файлы в хранилище?
Евгений Афанасьев
0
На всякий случай у кого-нибудь в будущем возникнет та же проблема, что и у меня:
Если вы используете
*
!/**/
!*.*
Хитрость для удаления двоичных файлов без расширения, убедитесь, что все остальные строки gitignore находятся ниже. Git будет читать из .gitignore сверху, поэтому, несмотря на то, что у меня в gitignore было «test.go», оно было первым в файле и стало «игнорируемым» после
Ответы:
Убедитесь, что вы
.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
чтобы правильно перестроить индекс.Я сталкиваюсь с этим, это старый вопрос, но я хочу, чтобы этот файл отслеживался, но не отслеживал его на определенных рабочих копиях, для этого вы можете запустить
источник
.gitignore будет игнорировать только те файлы, которые вы еще не добавили в свой репозиторий.
Если вы сделали это
git add .
, и файл был добавлен в индекс, .gitignore вам не поможет. Вам нужно будет сделать,git rm sites/default/settings.php
чтобы удалить его, и тогда он будет проигнорирован.источник
git rm
должен сделать это, но он может попросить вас использовать опцию -f, которая удалит его из рабочего каталога. Я не понял этого, кроме как сделать копию файла, сделать,git rm -f
а затем восстановить копию.Пожалуйста, используйте эту команду
Иногда файлы .gitignore не работают, даже если они правильные. Причина, по которой Git игнорирует файлы, заключается в том, что они не добавляются в хранилище. Если вы добавили файл, который хотите игнорировать ранее, он будет отслеживаться Git, и все пропущенные соответствующие правила будут пропущены. Git делает это, потому что файл уже является частью репозитория.
источник
У меня такая же проблема. Файлы, определенные в
.gitingore
тех местах, где они указаны как неотслеживаемые при запускеgit status
.Причина была в том, что
.gitignore
файл был сохранен вUTF-16LE
кодировке, а не вUTF8
кодировке.После изменения кодировки
.gitignore
файлаUTF8
у меня это сработало.источник
Что я сделал, чтобы игнорировать файл settings.php успешно:
Я думаю, что если в Git есть зафиксированный файл, игнорирование не работает должным образом. Просто удалите файл и подтвердите. После этого он будет игнорироваться.
источник
Есть примеры, например, файлы конфигурации приложения, которые я хочу отслеживать в git (поэтому .gitignore не будет работать), но мне нужно изменить их для локальных настроек. Я не хочу, чтобы git управлял этими файлами или показывал их как измененные. Для этого я использую skip-worktree:
Вы можете подтвердить, что файлы пропущены, перечислив файлы и проверив наличие строк, начинающихся с S, для пропущенных
Если в будущем вы захотите, чтобы git снова управлял файлом локально, просто запустите:
У Мескалито выше был отличный ответ, который привел меня на правильный путь, но
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
таким образом, «корень», упомянутый выше (я бы назвал его корнем вашего рабочего дерева), и.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 и проигнорировал его, и он заработал.
источник