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

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

2057
задан trobrock 16 июля '09 в 22: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.

3436
ответ дан trobrock 16 июля '09 в 22: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:]]"
471
ответ дан dyodji 06 июля '12 в 20:09
источник поделиться

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

334
ответ дан pagetribe 15 сент. '10 в 2:55
источник поделиться

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

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

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

71
ответ дан Antony Stubbs 18 июля '09 в 11:15
источник поделиться

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

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

45
ответ дан MikeJansen 02 февр. '12 в 18:59
источник поделиться

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

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

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

37
ответ дан Orlando 15 июля '11 в 10: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

Спасибо

33
ответ дан przbadu 02 марта '14 в 12:00
источник поделиться

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

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

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

git update-index --no-assume-unchanged path/to/file                      
27
ответ дан Mark Salvatore 21 авг. '13 в 17:20
источник поделиться

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

git update-index --assume-unchanged filename
23
ответ дан Iman Mohamadi 17 апр. '15 в 10:21
источник поделиться

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

22
ответ дан Olga 19 июня '13 в 0:08
источник поделиться

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

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

git reset HEAD

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

21
ответ дан averydev 12 апр. '11 в 23:39
источник поделиться

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

Вместо

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

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

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

18
ответ дан Hunter S 15 нояб. '15 в 7:03
источник поделиться

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

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

это работает

# ignore my tmp folder
tmp/
17
ответ дан kindahero 06 дек. '11 в 16:14
источник поделиться

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

17
ответ дан Aragorn 16 июля '09 в 22: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. Это просто для файлов, которые не были изменены.

11
ответ дан umop 03 июля '12 в 20:25
источник поделиться

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

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

git rm -r --cached .

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

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

9
ответ дан Ahmad Awais 19 июля '17 в 8:38
источник поделиться

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

8
ответ дан Johannes Vetter 02 марта '12 в 12:56
источник поделиться

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

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

7
ответ дан Matt Parkins 21 мая '13 в 12:43
источник поделиться

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

WWW/архив/*

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

6
ответ дан ndemoreau 09 марта '13 в 9: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.", которые, конечно, у вас нет.

4
ответ дан Gabriel Perdue 20 февр. '16 в 1:52
источник поделиться

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

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

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

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

3
ответ дан Etherealone 20 апр. '17 в 9:18
источник поделиться

Другие вопросы по меткам