файлы - gitignore пример файла




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

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


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


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

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

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


Если вы пытаетесь игнорировать изменения в файле, который уже отслеживается в репозитории (например, файл dev.properties, который вам нужно изменить для вашей локальной среды, но вы никогда не захотите проверять эти изменения), чем то, что вы хотите сделать является:

git update-index --assume-unchanged <file>

Если вы хотите снова начать отслеживать изменения

git update-index --no-assume-unchanged <file>

См. Справочную страницу git-update-index (1) .

Также no-skip-worktree параметрами skip-worktree и no-skip-worktree для индекса обновления, если вам это нужно, чтобы сохранить прошлое git-reset ( via )

Обновление. Поскольку люди спрашивали, вот удобный (и обновленный после прокомментированного ниже) псевдоним для того, чтобы увидеть, какие файлы в настоящее время «игнорируются» (- без изменений) в вашей локальной рабочей области

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"

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

Спасибо


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


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

Из моего ответа здесь: https://.com/a/11451916/406592


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

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

git rm -r --cached .

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

После этого просто совершайте и нажимайте!


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

WWW / архив / *

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


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

Вместо:

  1. Извлеките файл из управляемого git каталога
  2. Проверьте удаление в git
  3. Переместите файл обратно в управляемый git каталог

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

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


Одно дело также иметь в виду, если .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 rm --cached filename


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

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

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

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

другая проблема, которую я имел, - я сделал встроенный комментарий.

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

это работает

# ignore my tmp folder
tmp/

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

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

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





git-rm