Skip to content

Instantly share code, notes, and snippets.

@hightemp
Created December 27, 2018 10:30
Show Gist options
  • Select an option

  • Save hightemp/b92a152310181163124acdd17c7459ba to your computer and use it in GitHub Desktop.

Select an option

Save hightemp/b92a152310181163124acdd17c7459ba to your computer and use it in GitHub Desktop.
git exclude

Git ignore. Игнорирование в гит. Для начинающих

Есть различные ситуации, в каждой может применяться свой способ игнорирования. Разберу способы.

.gitignore — исключения в репозитории для всех

Игнорирование с помощью создания файла .gitignore прямо в содержимом репозитория приводит к тому, что:

гит будет игнорировать изменения в файлах указанных в .gitignore; сам файл .gitignore будет проиндексирован гитом, и это хорошо; все разработчики проекта в результате clone/pull получат файл .gitignore и будут видеть изменения в нем. Например, запуливаем в очередной раз к себе на машину проект, настройки („config“) указанные в .gitignore — не скачались, и великолепно, так как настройки подключения к БД на нашей машине другие. И при этом скачались „config-example“, которые могут подсказать, что не так в наших старых настройках.

.gitignore применяется в тех случаях, когда функционирование проекта без скрытых файлов не возможно, но эти файлы не являются обновляемым „ядром“ проекта. Возможно, это файлы настроек проекта, отображения (шаблоны) ну или файлы базы данных, например sqlite.db.

Применять для: настройки проекта, БД, шаблоны…

.git/info/exclude — исключения в репозитории, для исключения мусора проекта (проект тоже мусорит, ага)

Отредактировав файл .git/info/exclude мы получаем следующий эффект:

гит будет игнорировать изменения в файлах указанных в .git/info/exclude; изменения в файле .git/info/exclude не индексируются гитом, и это хорошо; никто из разработчиков проекта в результате clone/pull не получит измененный файл .git/info/exclude и не будет видеть изменения в нем. Если проект рабочий, а не на гитхабе и прямо в рабочей папке создан репозиторий, то сам проект создает кеш, логи и другие вспомогательные файлы. При необходимости стащить рабочее ядро проекта, для запуска копии или подобного проекта мы пуляем себе на машину ядро, и нам не зачем тащить логи кеш старого проекта. И мы даже не узнаем, что всё это ранее существовало. Для получения именно такого эффекта указываем исключения в данной настройке.

Применять для: кеш, логи…

~/.gitconfig, ~/.gitexcludes — исключения вне репозитория, для исключения мусора разработчиков

На машиене, на которой вы работаете, вы можете настроить скрытия „под себя“. Чтобы настроить гит на восприятия файла ~/.gitexcludes как файла с вашими исключениями, выполните команду для настройки: git config --global core.excludesfile ~/.gitexcludes или в ручную: внесите изменения в файл ~/.gitconfig: в раздел [core] добавить строку excludesfile = ~/.gitexcludes В результате настроек мы получим:

гит будет игнорировать изменения в файлах указанных в ~/.gitexcludes; изменения в файле ~/.gitexcludes не индексируются гитом, это понятно, он же не в репозитории; никто из разработчиков проекта в результате вашего push не получит измененный файл ~/.gitexcludes и не увидит изменений в нём (ну ессесно!). Во время вашей работы (программирования) могут создаваться вспомогательные файлы не относящиеся к проекту (настройки ваших программ, заметки…).

Применять для: настройки IDE, ваши личные заметки…

ЗЫ: вы же понимаете, что если файл уже был в репозитории и мы только сейчас решили его исключить (и так что бы он не появлялся при pull), то необходимо его удалить из индекса. Я часто находил этот вопрос при гуглении вместо своих вопросов, типа: „почему файл всё равно закачивается, хотя я его добавил в игнор?“

git rm --cached path/to/file

http://www.zlatov.net/publication/git-ignore-ignorirovanie-v-git-dlya-nachinayuschih.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment