Игнорировать файлы, которые уже были зафиксированы в репозитории Git [дубликат]
этот вопрос уже есть ответ здесь:
- как заставить Git "забыть" о файле, который был отслежен, но теперь находится .гитюдного? 20 ответов
У меня уже есть инициализированный репозиторий Git, который я добавил .gitignore
file to. Как я могу обновить индекс файла, чтобы файлы, которые я хочу игнорировать, игнорировались?
21 ответ:
чтобы отследить a один файл, который уже был добавлен / инициализирован в ваш репозиторий,т. е., прекратите отслеживать файл, но не удаляйте его из своей системы используйте:
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 (через)
обновление: Поскольку люди спрашивали, Вот удобный (и обновленный с момента комментария ниже) псевдоним для просмотра того, какие файлы в настоящее время "игнорируются" (--предположим-без изменений) в вашем локальном рабочем пространстве
$ 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
кроме того, убедитесь, что у вас нет пробела в вашем .gitignore. Я добрался до этого вопроса, потому что я искал ответ, тогда у меня было забавное чувство, что я должен открыть редактор, а не просто кошачий .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
файл и зафиксировать изменения. И с этого момента любые изменения, внесенные в конфигурацию/базу данных.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!
Не зная точно, что сделала команда "ответ", я запустил ее, к моему большому разочарованию. Он рекурсивно удаляет каждый файл из вашего РЕПО git.
Stackoverflow на помощь... как вернуть "git rm-r ."?
git reset HEAD
сделал трюк, так как у меня были незафиксированные локальные файлы, которые я не хотел перезаписывать.
есть еще одно предложение, может быть, для медленных парней, как я =) поставить .gitignore файл в корень репозитория не на .ГИТ. Ура!
ни один из ответов работал для меня.
вместо:
- переместить файл из каталога, управляемого git
- Проверьте удаление в git
- переместите файл обратно в каталог, управляемый git
после перемещения файла обратно, git будет игнорировать его.
Работает с каталогами тоже!
еще одна проблема у меня была я разместил встроенный комментарий.
tmp/* # ignore my tmp folder (this doesn't work)
это работает
# ignore my tmp folder tmp/
благодаря вашему ответу, я смог написать эту небольшую команду, чтобы улучшить его. Я запустил его на своем .gitignore и РЕПО, и не было никаких проблем, но если кто-нибудь видит какие-либо вопиющие проблемы, пожалуйста, прокомментируйте. Это должно
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. Все было на месте и казалось правильным. Единственная причина почему моя .gitignore был "проигнорирован", что окончание строки было в Mac-формате (\r). Поэтому после сохранения файла с правильным окончанием строки (в vi с помощью :set ff=unix) все работало как шарм!
еще одна проблема, не упомянутая здесь, Если вы создали свой .gitignore в блокноте Windows это может выглядеть как тарабарщина на других платформах, как я узнал. Ключ состоит в том, чтобы убедиться, что кодировка установлена в ANSI в блокноте (или сделать файл на linux, как я сделал).
из моего ответа здесь: https://stackoverflow.com/a/11451916/406592
на моем сервере linux server (не верно на моем локальном dev 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