У меня есть уже инициализированный репозиторий Git, в который я добавил файл .gitignore
. Как обновить индекс файла, чтобы файлы, которые я хочу игнорировать, игнорировались?
Игнорировать файлы, которые уже были переданы в репозиторий Git
Ответ 1
Чтобы отследить один файл, который уже был добавлен/инициализирован в ваш репозиторий, т.е. Остановить отслеживание файла, но не удалить его из вашей системы, используйте: 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.
В противном случае вы потеряете любые изменения в других файлах.
Ответ 2
Если вы пытаетесь игнорировать изменения в файле, который уже отслеживается в репозитории (например, файл dev.properties, который вам нужно изменить для вашей локальной среды, но вы никогда не захотите проверять эти изменения), чем то, что вы хотите сделать это:
git update-index --assume-unchanged <file>
Если вы хотите снова начать отслеживание изменений
git update-index --no-assume-unchanged <file>
См. git -update-index (1) Страница руководства.
Также ознакомьтесь с параметрами skip-worktree
и no-skip-worktree
для индекса обновления, если вам нужно это, чтобы сохранить прошлое git - reset (через)
Обновление: Поскольку люди спрашивали, здесь удобный (и обновленный после прокомментированного ниже) псевдоним для того, чтобы увидеть, какие файлы в настоящее время "игнорируются" (- без изменений) в локальной рабочей области
$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
Ответ 3
Чтобы отследить файл, который уже был добавлен/инициализирован в ваш репозиторий, то есть прекратите отслеживание файла, но не удалите его из вашей системы: git rm --cached filename
Ответ 4
Да - .gitignore
система игнорирует файлы, которые в настоящее время не находятся под управлением версиями от git.
т.е. если вы уже добавили файл с именем test.txt
с помощью git-add
, то добавление test.txt
в .gitignore
все равно приведет к отслеживанию изменений test.txt
.
Сначала вам нужно git rm test.txt
и зафиксировать это изменение. Только тогда изменения в test.txt
будут проигнорированы.
Ответ 5
Удалить пробельные пробелы в .gitignore
Кроме того, убедитесь, что в вашем .gitignore нет конечных пробелов. Я добрался до этого вопроса, потому что искал ответ, тогда мне было смешно, что я должен открыть редактор вместо того, чтобы просто косить .gitignore. Удалено лишнее пространство с конца, а poof работает сейчас:)
Ответ 6
i выполнил следующие шаги
git rm -r --cached .
git add .
git reset HEAD
после этого git удалите все файлы (*.swp в моем случае), которые следует игнорировать.
Ответ 7
Если вы хотите остановить файл отслеживания, не удаляя файл из локальной системы, который я предпочитаю игнорировать config/database.yml
. Просто попробуйте:
git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.
добавьте этот файл в файл .gitignore
и зафиксируйте изменения. И с этого момента любые изменения, внесенные в config/database.yml, не будут отслеживаться с помощью git.
$ echo config/database.yml >> .gitignore
Спасибо
Ответ 8
Чтобы удалить только несколько определенных файлов:
git update-index --assume-unchanged path/to/file
Если вы хотите снова начать отслеживать его:
git update-index --no-assume-unchanged path/to/file
Ответ 9
Как сообщает dav_i, чтобы сохранить файл в репо и все же удалить его из изменений без создания дополнительной фиксации, вы можете использовать:
git update-index --assume-unchanged filename
Ответ 10
Комплексные ответы везде!
Просто используйте следующие
git rm -r --cached .
Он удалит файлы, которые вы пытаетесь игнорировать, из источника, а не из мастера на вашем компьютере!
После этого просто зафиксируйте и нажмите!
Ответ 11
Не зная, что сделала команда "ответ", я побежал, к большому разочарованию. Он рекурсивно удаляет каждый файл из вашего репозитория git.
Сохранение на резервную копию... Как вернуть "git rm -r." ?
git reset HEAD
Это трюк, поскольку у меня были незаблокированные локальные файлы, которые я не хотел перезаписывать.
Ответ 12
Есть другое предложение, возможно, для медленных парней вроде меня =) Поместите файл .gitignore в корень репозитория не в .git > . Ура!
Ответ 13
Ни один из ответов не работал у меня.
Вместо
- Извлеките файл из git -контролируемого каталога
- Проверьте удаление в git
- Переместить файл обратно в каталог git -controlled
После перемещения файла, git проигнорирует его.
Работает с каталогами!
Ответ 14
Другая проблема, с которой я столкнулся, заключалась в том, что я разместил встроенный комментарий.
tmp/* # ignore my tmp folder (this doesn't work)
это работает
# ignore my tmp folder
tmp/
Ответ 15
Если файлы уже находятся в управлении версиями, вам необходимо удалить их вручную.
Ответ 16
Благодаря вашему ответу, я смог написать этот маленький однострочный вкладыш, чтобы улучшить его. Я запустил его на своем .gitignore и репо, и у меня не было проблем, но если кто-нибудь увидит какие-либо вопиющие проблемы, прокомментируйте. Это должно git rm -r --cached
от .gitignore
:
cat $(git rev-parse --show-toplevel)/ .gitIgnore | sed "s//$//" | grep -v "^ #" | xargs -L 1 -I {} найти $(git rev-parse --show-toplevel) -name "{}" | xargs -L 1 git rm -r --cached
Обратите внимание, что вы получите много fatal: pathspec '<pathspec>' did not match any files
. Это просто для файлов, которые не были изменены.
Ответ 17
Я нашел странную проблему с .gitignore. Все было на месте и казалось правильным. Единственная причина, по которой мой .gitignore был "проигнорирован", заключалась в том, что окончание строки было в Mac-Format (\ r). Поэтому после сохранения файла с правильным концом строки (в vi с использованием: set ff = unix) все работало как шарм!
Ответ 18
Еще одна проблема, не упомянутая здесь, заключается в том, что вы создали свой .gitignore в блокноте Windows, который, как я узнал, может выглядеть как тарабарщина на других платформах. Ключ должен убедиться, что кодировка установлена в ANSI в блокноте (или создайте файл на linux, как и я).
Из моего ответа здесь: fooobar.com/questions/2007/...
Ответ 19
На моем сервере linux server (неправда на моем локальном мастере dev) каталоги игнорируются, пока я не добавляю звездочку:
WWW/архив/*
Я не знаю, почему, но это заставило меня потерять пару часов, поэтому я хотел поделиться...
Ответ 20
Следует иметь в виду, что если .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."
, которые, конечно, у вас нет.
Ответ 21
Если вам нужно прекратить отслеживать много игнорируемых файлов, вы можете комбинировать некоторые команды:
git ls-files -i --exclude-standard | xargs -L1 git rm --cached
Это остановит отслеживание игнорируемых файлов. Если вы хотите удалить файлы из файловой системы, не используйте параметр --cached
. Вы также можете указать папку для ограничения поиска, например:
git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm