Игнорировать файлы, которые уже были зафиксированы в репозитории Git [дубликат]
этот вопрос уже есть ответ здесь:
- как заставить Git "забыть" о файле, который был отслежен, но теперь находится .гитюдного? 20 ответов
У меня уже есть инициализированный репозиторий Git, который я добавил для. Как я могу обновить индекс файла, чтобы файлы, которые я хочу игнорировать, игнорировались?
21 ответов
чтобы отследить один файл, который уже был добавлен / инициализирован в ваш репозиторий,то есть, остановить отслеживание файла, но не удалить его из системы использовать:git rm --cached filename
чтобы отслеживать файл, который теперь находится в вашем .gitignore
:
сначала зафиксируйте любые выдающиеся изменения кода, а затем выполните следующую команду:
git rm -r --cached .
это удаляет все измененные файлы из индекс(промежуточная область), затем просто запустите:
git add .
совершил его:
git commit -m ".gitignore is now working"
отменить git rm --cached filename
используйте git add filename
.
убедитесь, что зафиксировать все важные изменения перед запуском
git add .
В противном случае вы потеряете все изменения в других файлах.
если вы пытаетесь игнорировать изменения в файле, который уже отслеживается в репозитории (например, dev.файл свойств, который вам нужно будет изменить для вашей локальной среды, но вы никогда не захотите проверить эти изменения), чем то, что вы хотите сделать:
git update-index --assume-unchanged <file>
если вы хотите снова начать отслеживать изменения
git update-index --no-assume-unchanged <file>
посмотреть Git-update-index(1) Страница руководства.
также посмотреть skip-worktree
и no-skip-worktree
опции для update-index, если вам нужно, чтобы это сохранялось после git-reset (via)
обновление: Поскольку люди спрашивали, Вот удобный (и обновленный с комментариями ниже) псевдоним для просмотра, какие файлы в настоящее время "игнорируются" (--assume-unchanged) в вашем локальном рабочем пространстве
$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
чтобы отследить файл, который уже был добавлен / инициализирован в ваш репозиторий, т. е. прекратить отслеживание файла, но не удалять его из вашей системы используйте:git rm --cached filename
да .gitignore
система игнорирует только файлы, которые в настоящее время не находятся под контролем версий от git.
т. е. если вы уже добавили файл с названием test.txt
С помощью git-add
, затем добавляем test.txt
to .gitignore
все равно вызовет изменения test.txt
чтобы быть отслежены.
вы должны git rm test.txt
сначала и зафиксируйте это изменение. Только тогда будет изменено на test.txt
игнорируется.
удалить конечные пробелы .gitignore
кроме того, убедитесь, что у вас нет пробела в вашем .гитюдного. Я добрался до этого вопроса, потому что искал ответ, а потом у меня появилось странное чувство, что я должен открыть редактор, а не просто кататься .гитюдного. Удалено одно дополнительное пространство с конца и бац теперь работает:)
я следовал этим шагам
git rm -r --cached .
git add .
git reset HEAD
после этого git удалит все файлы (*.swp в моем случае), который следует игнорировать.
если вы хотите остановить отслеживание файла, не удаляя файл из локальной системы, который я предпочитаю игнорировать . Просто попробуйте:
git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.
теперь, добавьте этот файл в .gitignore
file и зафиксировать изменения. И отныне любые изменения, внесенные в config / database.yml не будет отслеживаться git.
$ echo config/database.yml >> .gitignore
спасибо
чтобы удалить только несколько конкретных файлов из отслеживания:
git update-index --assume-unchanged path/to/file
Если когда - либо вы хотите, чтобы начать отслеживать его снова:
git update-index --no-assume-unchanged path/to/file
Как говорит dav_i, чтобы сохранить файл в репо и все же удалить его из изменений без создания дополнительной фиксации, вы можете использовать:
git update-index --assume-unchanged filename
сложные ответы везде!
просто используйте следующее
git rm -r --cached .
он удалит файлы, которые вы пытаетесь игнорировать из источника, а не из Мастера на вашем компьютере!
после этого просто commit и push!
Stackoverflow на помощь... как вернуть "git rm-r ."?
git reset HEAD
сделал трюк, так как у меня были незафиксированные локальные файлы, которые я не хотел перезаписывать.
есть еще одно предложение, возможно, для медленных парней, таких как я=) положите .gitignore файл в корневой каталог репозитория не на .git. Ура!
ни один из ответов работал для меня.
вместо:
- переместить файл из каталога, контролируемого git
- Проверьте удаление в git
- переместите файл обратно в каталог, управляемый git
после перемещения файла назад git проигнорирует его.
Работает с каталогами тоже!
еще одна проблема у меня была, я разместил встроенный комментарий.
tmp/* # ignore my tmp folder (this doesn't work)
это работает
# ignore my tmp folder
tmp/
благодаря вашему ответу, я смог написать эту небольшую команду, чтобы улучшить его. Я проверил его на своем .gitignore и repo, и не было никаких проблем, но если кто-то видит какие-либо вопиющие проблемы, прокомментируйте. Это должно git rm -r --cached
с .gitignore
:
cat $(git rev-parse --show-toplevel)/.гитюдного | СЭД "ы//$//" | команда grep -v с "^#" | команды xargs -Л 1 -я {} найти $(ЖКТ Рэв-синтаксический анализ --шоу-уровня) -название "{}" | команды xargs -Л 1 ГИТ РМ -Р --кэшированные
обратите внимание, что вы получите много fatal: pathspec '<pathspec>' did not match any files
. Это только для файлов, которые не изменялись.
Я нашел странную проблему .гитюдного. Все было на месте и казалось правильным. Единственная причина, почему моя .gitignore было "проигнорировано" было то, что строка-окончание было в Mac-формате (\r). Поэтому после сохранения файла с правильной строкой-окончанием (в vi с помощью :set ff=unix) все работало как шарм!
еще одна проблема, не упомянутая здесь, Если вы создали свой .gitignore в Windows notepad это может выглядеть как тарабарщина на других платформах, как я узнал. Ключ состоит в том, чтобы убедиться, что кодировка установлена в ANSI в блокноте (или сделать файл в linux, как я сделал).
из моего ответа здесь: https://stackoverflow.com/a/11451916/406592
на моем сервере linux server (не true на моем локальном компьютере Mac) каталоги игнорируются, пока я не добавляю звездочку:
www / archives/*
Я не знаю, почему, но это заставило меня потерять пару часов, поэтому я хотел бы поделиться...
одно дело иметь в виду, если .gitignore
не похоже, что игнорирование неотслеженных файлов заключается в том, что у вас не должно быть комментариев в той же строке, что и игнорирует. Так что все в порядке
# ignore all foo.txt, foo.markdown, foo.dat, etc.
foo*
но это не сработает:
foo* # ignore all foo.txt, foo.markdown, foo.dat, etc.
.gitignore
интерпретирует последний случай как " игнорировать файлы с именем "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc."
, что, конечно, у вас нет.
Если вам нужно прекратить отслеживать много игнорируемых файлов, вы можете объединить некоторые команды:
git ls-files -i --exclude-standard | xargs -L1 git rm --cached
это остановит отслеживание игнорируемых файлов. Если вы хотите удалить файлы из файловой системы, не используйте . Можно также указать папку для ограничения поиска, например:
git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm