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

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

+2224
16 июл. '09 в 19:26
источник поделиться
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. В противном случае вы потеряете любые изменения в других файлах.

+3691
16 июл. '09 в 19:32
источник

Если вы пытаетесь игнорировать изменения в файле, который уже отслеживается в репозитории (например, файл 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:]]"
+527
06 июл. '12 в 17:09
источник
другие ответы

Связанные вопросы


Похожие вопросы

Чтобы отследить файл, который уже был добавлен/инициализирован в ваш репозиторий, то есть прекратите отслеживание файла, но не удалите его из вашей системы: git rm --cached filename

+351
14 сент. '10 в 23:55
источник

Да - .gitignore система игнорирует файлы, которые в настоящее время не находятся под управлением версиями от git.

т.е. если вы уже добавили файл с именем test.txt с помощью git-add, то добавление test.txt в .gitignore все равно приведет к отслеживанию изменений test.txt.

Сначала вам нужно git rm test.txt и зафиксировать это изменение. Только тогда изменения в test.txt будут проигнорированы.

+78
18 июл. '09 в 8:15
источник

Удалить пробельные пробелы в .gitignore

Кроме того, убедитесь, что в вашем .gitignore нет конечных пробелов. Я добрался до этого вопроса, потому что искал ответ, тогда мне было смешно, что я должен открыть редактор вместо того, чтобы просто косить .gitignore. Удалено лишнее пространство с конца, а poof работает сейчас:)

+50
02 февр. '12 в 15:59
источник

i выполнил следующие шаги

git rm -r --cached .
git add .
git reset HEAD

после этого git удалите все файлы (*.swp в моем случае), которые следует игнорировать.

+40
15 июл. '11 в 7:22
источник

Если вы хотите остановить файл отслеживания, не удаляя файл из локальной системы, который я предпочитаю игнорировать 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

Спасибо

+37
02 мар. '14 в 9:00
источник

Чтобы удалить только несколько определенных файлов:

git update-index --assume-unchanged path/to/file

Если вы хотите снова начать отслеживать его:

git update-index --no-assume-unchanged path/to/file                      
+28
21 авг. '13 в 14:20
источник

Как сообщает dav_i, чтобы сохранить файл в репо и все же удалить его из изменений без создания дополнительной фиксации, вы можете использовать:

git update-index --assume-unchanged filename
+26
17 апр. '15 в 7:21
источник

Комплексные ответы везде!

Просто используйте следующие

git rm -r --cached .

Он удалит файлы, которые вы пытаетесь игнорировать, из источника, а не из мастера на вашем компьютере!

После этого просто зафиксируйте и нажмите!

+25
19 июл. '17 в 5:38
источник

Не зная, что сделала команда "ответ", я побежал, к большому разочарованию. Он рекурсивно удаляет каждый файл из вашего репозитория git.

Сохранение на резервную копию... Как вернуть "git rm -r." ?

git reset HEAD

Это трюк, поскольку у меня были незаблокированные локальные файлы, которые я не хотел перезаписывать.

+24
12 апр. '11 в 20:39
источник

Есть другое предложение, возможно, для медленных парней вроде меня =) Поместите файл .gitignore в корень репозитория не в .git > . Ура!

+23
18 июн. '13 в 21:08
источник

Ни один из ответов не работал у меня.

Вместо

  • Извлеките файл из git -контролируемого каталога
  • Проверьте удаление в git
  • Переместить файл обратно в каталог git -controlled

После перемещения файла, git проигнорирует его.

Работает с каталогами!

+22
15 нояб. '15 в 4:03
источник

Другая проблема, с которой я столкнулся, заключалась в том, что я разместил встроенный комментарий.

tmp/*   # ignore my tmp folder (this doesn't work)

это работает

# ignore my tmp folder
tmp/
+20
06 дек. '11 в 13:14
источник

Если файлы уже находятся в управлении версиями, вам необходимо удалить их вручную.

+18
16 июл. '09 в 19:28
источник

Благодаря вашему ответу, я смог написать этот маленький однострочный вкладыш, чтобы улучшить его. Я запустил его на своем .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. Это просто для файлов, которые не были изменены.

+13
03 июл. '12 в 17:25
источник

Я нашел странную проблему с .gitignore. Все было на месте и казалось правильным. Единственная причина, по которой мой .gitignore был "проигнорирован", заключалась в том, что окончание строки было в Mac-Format (\ r). Поэтому после сохранения файла с правильным концом строки (в vi с использованием: set ff = unix) все работало как шарм!

+10
02 мар. '12 в 9:56
источник

Еще одна проблема, не упомянутая здесь, заключается в том, что вы создали свой .gitignore в блокноте Windows, который, как я узнал, может выглядеть как тарабарщина на других платформах. Ключ должен убедиться, что кодировка установлена ​​в ANSI в блокноте (или создайте файл на linux, как и я).

Из моего ответа здесь: qaru.site/questions/2007/...

+9
21 мая '13 в 9:43
источник

На моем сервере linux server (неправда на моем локальном мастере dev) каталоги игнорируются, пока я не добавляю звездочку:

WWW/архив/*

Я не знаю, почему, но это заставило меня потерять пару часов, поэтому я хотел поделиться...

+8
09 мар. '13 в 6:36
источник

Следует иметь в виду, что если .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.", которые, конечно, у вас нет.

+6
19 февр. '16 в 22:52
источник

Если вам нужно прекратить отслеживать много игнорируемых файлов, вы можете комбинировать некоторые команды:

git ls-files -i --exclude-standard | xargs -L1 git rm --cached

Это остановит отслеживание игнорируемых файлов. Если вы хотите удалить файлы из файловой системы, не используйте параметр --cached. Вы также можете указать папку для ограничения поиска, например:

git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm

+4
20 апр. '17 в 6:18
источник

Посмотрите другие вопросы по меткам или Задайте вопрос