Как настроить git ignore

Содержание
  1. gitignore — игнорирование файлов в Git
  2. August 28, 2014
  3. Создание нового проекта
  4. Настройка игнорирования в .gitignore
  5. Усложнить задачу игнорирования в .gitignore
  6. Шаблоны в файле .gitignore
  7. TypeScript — размеченные объединения
  8. Игнорирование файлов и каталогов в Git (.gitignore)
  9. Какие файлы следует игнорировать?
  10. .gitignore Шаблоны
  11. Комментарии
  12. Буквальные имена файлов
  13. Подстановочные символы
  14. Квадратных скобок
  15. Отрицательные паттерны
  16. .gitignore Пример
  17. Местный .gitignore
  18. Личные правила игнорирования
  19. Глобальный .gitignore
  20. Игнорирование ранее зафиксированных файлов
  21. Отладка файла .gitignore
  22. Отображение всех игнорируемых файлов
  23. Выводы
  24. .gitignore
  25. Шаблоны игнорирования в Git
  26. Общие файлы .gitignore в вашем репозитории
  27. Персональные правила игнорирования в Git
  28. Глобальные правила игнорирования в Git
  29. Игнорирование ранее закоммиченного файла
  30. Коммит игнорируемого файла
  31. Скрытие изменений в игнорируем файле
  32. Отладка файлов .gitignore

gitignore — игнорирование файлов в Git

August 28, 2014

В системе Git можно настроить возможность автоматического игнорирования файлов.

То есть, можно указать Git, что файлы определенного типа не нужно отслеживать. Выполняется такая настройка с помощью специального файла .gitignore . Подобная возможность отключения отслеживания файлов в системе Git может понадобиться в случае, когда автоматически генерируются служебные файлы.

К примеру, если развертывать в проекте Compass, то будет создан каталог .sass , в который данный фреймворк помещает свой кэш, генерируемый автоматически при каждом изменении любого из файлов проекта.

Давайте на практике разберемся, каким образом можно настроить игнорирование файлов в Git с помощью .gitignore .

Создание нового проекта

Создаю новый проект с именем git_ignore , в котором помещаю несколько файлов разного типа:

Инициализирую репозиторий Git в директории .git_ignore , индексирую созданные файлы и фиксирую их:

Вывод команды git status показывает, что все чисто:

Настройка игнорирования в .gitignore

Для настройки игнорирования определенных типов файлов в системе Git необходимо первоначально создать файл .gitignore :

Откроем созданный файл .gitignore в любом редакторе:

… и пропишем в нем следующие строки:

Тем самым мы говорим Git, что нужно игнорировать все файлы с расширением .txt и .md внутри директории git_ignore . То есть, система контроля не будет отслеживать изменения во всех файлах этих типов.

Проиндексируем и зафиксируем изменения (создание файла настроек .gitignore ), а затем проверим данный факт. Для этого в рабочей директории git_ignore создаю еще несколько типов файлов:

Затем выполняю индексацию всех файлов, которые были добавлены или изменены в рабочем каталоге:

И смотрю, что мне показывает команда git status :

Система Git увидела только новый файл main.css . Два других файла — readme.txt и humans.md — проигнорированы системой. Отлично! Зафиксирую изменения.

Можно создать еще пару файлов в разных директориях и посмотреть на вывод команды git status в консоли:

Усложнить задачу игнорирования в .gitignore

Можно усложнить задачу игнорирования в Git, добавив в файл .gitignore директорию, содержимое которой также должно игнорироваться. Пускай это будет обычная директория ignore и скрытая директория .ignore (с точкой перед именем):

Добавлю в файл .gitignore пару строк таким образом:

Проиндексирую изменения, а затем выполню операции по созданию директорий и файлов внутри них:

Вновь ввожу команду просмотра состояния репозитория Git:

Все сработало — Git не захотел видеть директории ignore , .ignore , а также их содержимое. Отлично!

Шаблоны в файле .gitignore

Для файла .gitignore доступны шаблоны, с помощью которых можно задать маски для выборки необходимых типой файлов. Однако, обширная тема шаблонов выходит за рамки данной статьи. При желании можно почитать по теме шаблонов в книге “Pro Git — профессиональный контроль версий”.

TypeScript — размеченные объединения

> Пользовательское объединение типов — что это и как можно использоватьПомимо объединения **примитивных** типов данных (например):<% high. … Continue reading

Источник

Игнорирование файлов и каталогов в Git (.gitignore)

Часто при работе над проектом, использующим Git, вам нужно исключить определенные файлы или каталоги из отправки в удаленный репозиторий. Здесь .gitignore файл .gitignore .

Файл .gitignore указывает, какие неотслеживаемые файлы Git должен игнорировать.

Какие файлы следует игнорировать?

Игнорируемые файлы обычно представляют собой файлы для конкретной платформы или автоматически созданные файлы из систем сборки. Вот некоторые общие примеры:

  • Файлы времени выполнения, такие как файлы журнала, блокировки, кеша или временные файлы.
  • Файлы с конфиденциальной информацией, такой как пароли или ключи API.
  • Скомпилированный код, например .class или .o .
  • /node_modules зависимостей, например /vendor или /node_modules .
  • Каталоги сборки, например /public , /out или /dist .
  • Системные файлы, такие как .DS_Store или Thumbs.db
  • Файлы конфигурации IDE или текстового редактора .

.gitignore Шаблоны

.gitignore — это простой текстовый файл, в каждой строке которого содержится шаблон, который файлы или каталоги следует игнорировать.

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

Читайте также:  Как настроить соурс бан

Комментарии

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

Символ косой черты ( / ) представляет собой разделитель каталогов. .gitignore черта в начале шаблона относится к каталогу, в котором находится .gitignore .

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

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

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

Буквальные имена файлов

Самый простой шаблон — это буквальное имя файла без каких-либо специальных символов.

Шаблон Примеры совпадений
/access.log access.log
access.log access.log
logs/access.log
var/logs/access.log
build/ build

Подстановочные символы

* — символ звездочки соответствует нулю или более символам.

Шаблон Примеры совпадений
*.log error.log
logs/debug.log
build/logs/error.log

** — Два соседних символа звездочки соответствуют любому файлу или нулю или более каталогам. Если за ним следует косая черта ( / ), он соответствует только каталогам.

Шаблон Примеры совпадений
logs/** Соответствует чему-либо в каталоге logs .
**/build var/build
pub/build
build
foo/**/bar foo/bar
foo/a/bar
foo/a/b/c/bar

? — Знак вопроса соответствует любому одиночному символу.

Шаблон Примеры совпадений
access?.log access0.log
access1.log
accessA.log
foo?? fooab
foo23
foo0s

Квадратных скобок

[. ] — соответствует любому из символов, заключенных в квадратные скобки. Когда два символа разделены дефисом — это обозначает диапазон символов. Диапазон включает все символы, которые находятся между этими двумя символами. Диапазоны могут быть буквенными или числовыми.

Если первый символ после [ — восклицательный знак ( ! ), То шаблон соответствует любому символу, кроме символов из указанного набора.

Шаблон Примеры совпадений
*.[oa] file.o
file.a
*.[!oa] file.s
file.1
file.0
access.1.log access.0.log
access.1.log
access.2.log
file.[ac].out file.a.out
file.b.out
file.c.out
file.[a-cx-z].out file.a.out
file.b.out
file.c.out
file.x.out
file.y.out
file.z.out
access.[!0-2].log access.3.log
access.4.log
access.Q.log

Отрицательные паттерны

Шаблон, который начинается с восклицательного знака ( ! ), Отменяет (повторно включает) любой файл, который игнорируется предыдущим шаблоном. Исключением из этого правила является повторное включение файла, если его родительский каталог исключен.

Шаблон Примеры совпадений
*.log
!error.log
error.log или logs/error.log не будут проигнорированы

.gitignore Пример

Ниже приведен пример того, как может выглядеть ваш файл .gitignore :

Местный .gitignore

.gitignore файл .gitignore обычно помещается в корневой каталог репозитория. Однако вы можете создать несколько файлов .gitignore в разных подкаталогах вашего репозитория. Шаблоны в файлах .gitignore сопоставляются относительно каталога, в котором находится файл.

Шаблоны, определенные в файлах, которые находятся в каталогах (подкаталогах) более низкого уровня, имеют приоритет над шаблонами в каталогах более высокого уровня.

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

Личные правила игнорирования

Шаблоны, специфичные для вашего локального репозитория и не подлежащие распространению в другие репозитории, должны быть установлены в файле .git/info/exclude .

Например, вы можете использовать этот файл, чтобы игнорировать файлы, сгенерированные из ваших личных инструментов проекта.

Глобальный .gitignore

Git также позволяет вам создать глобальный файл .gitignore , в котором вы можете определить правила игнорирования для каждого репозитория Git в вашей локальной системе.

Файл можно назвать как угодно и хранить в любом месте. Чаще всего этот файл хранится в домашнем каталоге. Вам придется вручную создать файл и настроить Git для его использования.

Например, чтобы установить

/.gitignore_global в качестве глобального файла игнорирования Git, вы должны сделать следующее:

Добавьте файл в конфигурацию Git:

Откройте файл в текстовом редакторе и добавьте в него свои правила.

Глобальные правила особенно полезны для игнорирования определенных файлов, которые вы никогда не хотите фиксировать, например файлов с конфиденциальной информацией или скомпилированных исполняемых файлов.

Игнорирование ранее зафиксированных файлов

Файлы в вашей рабочей копии можно отслеживать или нет.

Чтобы проигнорировать файл, который был ранее зафиксирован, вам нужно деактивировать и удалить файл из индекса, а затем добавить правило для файла в .gitignore :

Параметр —cached указывает git не удалять файл из рабочего дерева, а только удалять его из индекса.

Чтобы рекурсивно удалить каталог, используйте параметр -r :

Если вы хотите удалить файл и из индекса, и из локальной файловой системы, опустите параметр —cached .

При рекурсивном удалении файлов используйте параметр -n , который выполнит «пробный запуск» и покажет вам, какие файлы будут удалены:

Отладка файла .gitignore

Иногда бывает сложно определить, почему игнорируется конкретный файл, особенно когда вы используете несколько файлов .gitignore или сложные шаблоны. Здесь пригодится команда git check-ignore с параметром -v , которая сообщает git отображать сведения о соответствующем шаблоне.

Например, чтобы проверить, почему файл www/yarn.lock игнорируется, вы должны запустить:

Вывод показывает путь к файлу gitignore , номер совпадающей строки и фактический шаблон.

Команда также принимает в качестве аргументов более одного имени файла, и файл не обязательно должен существовать в вашем рабочем дереве.

Отображение всех игнорируемых файлов

Команда git status с параметром —ignored отображает список всех игнорируемых файлов:

Выводы

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

gitignore.io — это онлайн-сервис, который позволяет создавать файлы .gitignore для вашей операционной системы, языка программирования или IDE.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

.gitignore

Git рассматривает каждый файл в вашей рабочей копии как файл одного из трех нижеуказанных типов.

  1. Отслеживаемый файл — файл, который был предварительно проиндексирован или зафиксирован в коммите.
  2. Неотслеживаемый файл — файл, который не был проиндексирован или зафиксирован в коммите.
  3. Игнорируемый файл — файл, явным образом помеченный для Git как файл, который необходимо игнорировать.

Игнорируемые файлы — это, как правило, артефакты сборки и файлы, генерируемые машиной из исходных файлов в вашем репозитории, либо файлы, которые по какой-либо иной причине не должны попадать в коммиты. Вот некоторые распространенные примеры таких файлов:

  • кэши зависимостей, например содержимое /node_modules или /packages ;
  • скомпилированный код, например файлы .o , .pyc и .class ;
  • каталоги для выходных данных сборки, например /bin , /out или /target ;
  • файлы, сгенерированные во время выполнения, например .log , .lock или .tmp ;
  • скрытые системные файлы, например .DS_Store или Thumbs.db ;
  • личные файлы конфигурации IDE, например .idea/workspace.xml .

Игнорируемые файлы отслеживаются в специальном файле .gitignore , который регистрируется в корневом каталоге репозитория. В Git нет специальной команды для указания игнорируемых файлов: вместо этого необходимо вручную отредактировать файл .gitignore , чтобы указать в нем новые файлы, которые должны быть проигнорированы. Файлы .gitignore содержат шаблоны, которые сопоставляются с именами файлов в репозитории для определения необходимости игнорировать эти файлы.

Шаблоны игнорирования в Git

Для сопоставления с именами файлов в .gitignore используются шаблоны подстановки. С помощью различных символов можно создавать собственные шаблоны.

Шаблон Примеры соответствия Пояснение*
**/logs logs/debug.log
logs/monday/foo.bar
build/logs/debug.log
Добавьте в начало шаблона две звездочки, чтобы сопоставлять каталоги в любом месте репозитория.
**/logs/debug.log logs/debug.log
build/logs/debug.log
но не
logs/build/debug.log
Две звездочки можно также использовать для сопоставления файлов на основе их имени и имени родительского каталога.
*.log debug.log
foo.log
.log
logs/debug.log
Одна звездочка — это подстановочный знак, который может соответствовать как нескольким символам, так и ни одному.
*.log
!important.log
debug.log
trace.log
но не
important.log
logs/important.log
Добавление восклицательного знака в начало шаблона отменяет действие шаблона. Если файл соответствует некоему шаблону, но при этом также соответствует отменяющему шаблону, указанному после, такой файл не будет игнорироваться.
*.log
!important/*.log
trace.*
debug.log
important/trace.log
но не
important/debug.log
Шаблоны, указанные после отменяющего шаблона, снова будут помечать файлы как игнорируемые, даже если ранее игнорирование этих файлов было отменено.
/debug.log debug.log
но не
logs/debug.log
Косая черта перед именем файла соответствует файлу в корневом каталоге репозитория.
debug.log debug.log
logs/debug.log
По умолчанию шаблоны соответствуют файлам, находящимся в любом каталоге
debug?.log debug0.log
debugg.log
но не
debug10.log
Знак вопроса соответствует строго одному символу.
debug4.log debug0.log
debug1.log
но не
debug10.log
Квадратные скобки можно также использовать для указания соответствия одному символу из заданного диапазона.
debug[01].log debug0.log
debug1.log
но не
debug2.log
debug01.log
Квадратные скобки соответствуют одному символу из указанного набора.
debug[!01].log debug2.log
но не
debug0.log
debug1.log
debug01.log
Восклицательный знак можно использовать для указания соответствия любому символу, кроме символов из указанного набора.
debug[a-z].log debuga.log
debugb.log
но не
debug1.log
Диапазоны могут быть цифровыми или буквенными.
logs logs
logs/debug.log
logs/latest/foo.bar
build/logs
build/logs/debug.log
Без косой черты в конце этот шаблон будет соответствовать и файлам, и содержимому каталогов с таким именем. В примере соответствия слева игнорируются и каталоги, и файлы с именем logs
logs/ logs/debug.log
logs/latest/foo.bar
build/logs/foo.bar
build/logs/latest/debug.log
Косая черта в конце шаблона означает каталог. Все содержимое любого каталога репозитория, соответствующего этому имени (включая все его файлы и подкаталоги), будет игнорироваться
logs/
!logs/important.log
logs/debug.log
logs/important.log
Минуточку! Разве файл logs/important.log из примера слева не должен быть исключен нз списка игнорируемых?

Нет! Из-за странностей Git, связанных с производительностью, вы не можете отменить игнорирование файла, которое задано шаблоном соответствия каталогу

logs/**/debug.log logs/debug.log
logs/monday/debug.log
logs/monday/pm/debug.log
Две звездочки соответствуют множеству каталогов или ни одному.
logs/*day/debug.log logs/monday/debug.log
logs/tuesday/debug.log
but not
logs/latest/debug.log
Подстановочные символы можно использовать и в именах каталогов.
logs/debug.log logs/debug.log
но не
debug.log
build/logs/debug.log
Шаблоны, указывающие на файл в определенном каталоге, задаются относительно корневого каталога репозитория. (При желании можно добавить в начало косую черту, но она ни на что особо не повлияет.)

Две звездочки (**) означают, что ваш файл .gitignore находится в каталоге верхнего уровня вашего репозитория, как указано в соглашении. Если в репозитории несколько файлов .gitignore, просто мысленно поменяйте слова «корень репозитория» на «каталог, содержащий файл .gitignore» (и подумайте об объединении этих файлов, чтобы упростить работу для своей команды)*.

Помимо указанных символов, можно использовать символ #, чтобы добавить в файл .gitignore комментарии:

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

Общие файлы .gitignore в вашем репозитории

Обычно правила игнорирования Git задаются в файле .gitignore в корневом каталоге репозитория. Тем не менее вы можете определить несколько файлов .gitignore в разных каталогах репозитория. Каждый шаблон из конкретного файла .gitignore проверяется относительно каталога, в котором содержится этот файл. Однако проще всего (и этот подход рекомендуется в качестве общего соглашения) определить один файл .gitignore в корневом каталоге. После регистрации файла .gitignore для него, как и для любого другого файла в репозитории, включается контроль версий, а после публикации с помощью команды push он становится доступен остальным участникам команды. В файл .gitignore , как правило, включаются только те шаблоны, которые будут полезны другим пользователям репозитория.

Персональные правила игнорирования в Git

В специальном файле, который находится в папке .git/info/exclude , можно определить персональные шаблоны игнорирования для конкретного репозитория. Этот файл не имеет контроля версий и не распространяется вместе с репозиторием, поэтому он хорошо подходит для указания шаблонов, которые будут полезны только вам. Например, если у вас есть пользовательские настройки для ведения журналов или специальные инструменты разработки, которые создают файлы в рабочем каталоге вашего репозитория, вы можете добавить их в .git/info/exclude , чтобы они случайно не попали в коммит в вашем репозитории.

Глобальные правила игнорирования в Git

Кроме того, для всех репозиториев в локальной системе можно определить глобальные шаблоны игнорирования Git, настроив параметр конфигурации Git core.excludesFile . Этот файл нужно создать самостоятельно. Если вы не знаете, куда поместить глобальный файл .gitignore , расположите его в домашнем каталоге (потом его будет легче найти). После создания этого файла необходимо настроить его местоположение с помощью команды git config :

Будьте внимательны при указании глобальных шаблонов игнорирования, поскольку для разных проектов актуальны различные типы файлов. Типичные кандидаты на глобальное игнорирование — это специальные файлы операционной системы (например, .DS_Store и thumbs.db ) или временные файлы, создаваемые некоторыми инструментами разработки.

Игнорирование ранее закоммиченного файла

Чтобы игнорировать файл, для которого ранее был сделан коммит, необходимо удалить этот файл из репозитория, а затем добавить для него правило в .gitignore . Используйте команду git rm с параметром —cached , чтобы удалить этот файл из репозитория, но оставить его в рабочем каталоге как игнорируемый файл.

Опустите опцию —cached , чтобы удалить файл как из репозитория, так и из локальной файловой системы.

Коммит игнорируемого файла

Можно принудительно сделать коммит игнорируемого файла в репозиторий с помощью команды git add с параметром -f (или —force ):

Этот способ хорош, если у вас задан общий шаблон (например, *.log ), но вы хотите сделать коммит определенного файла. Однако еще лучше в этом случае задать исключение из общего правила:

Этот подход более прозрачен и понятен, если вы работаете в команде.

Скрытие изменений в игнорируем файле

Команда git stash — это мощная функция системы Git, позволяющая временно отложить и отменить локальные изменения, а позже применить их повторно. По умолчанию команда git stash ожидаемо не обрабатывает игнорируемые файлы и создает отложенные изменения только для тех файлов, которые отслеживаются Git. Тем не менее вы можете вызвать команду git stash с параметром —all, чтобы создать отложенные изменения также для игнорируемых и неотслеживаемых файлов.

Отладка файлов .gitignore

Если шаблоны .gitignore сложны или разбиты на множество файлов .gitignore , бывает непросто отследить, почему игнорируется определенный файл. Используйте команду git check-ignore с параметром -v (или —verbose ), чтобы определить, какой шаблон приводит к игнорированию конкретного файла:

При желании команде git check-ignore можно передать несколько имен файлов, причем сами имена могут даже не соответствовать файлам, существующим в вашем репозитории.

Готовы изучить Git?

Ознакомьтесь с этим интерактивным обучающим руководством.

Источник

Оцените статью