Игнорировать файлы, которые уже были переданы в репозиторий Git

У меня есть уже инициализированный репозиторий Git, в который я добавил файл .gitignore. Как обновить индекс файла, чтобы файлы, которые я хочу игнорировать, игнорировались?

Ответ 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