- Настройка глобального файла .gitignore
- Как создать глобальный .gitignore
- Игнорирование файлов и каталогов в Git (.gitignore)
- Какие файлы следует игнорировать?
- Шаблон .gitignore
- Комментарии
- Рассечение
- Литеральные имена файлов
- Символы подстановки
- Квадратные скобки
- Отрицательные образцы
- Пример .gitignore
- Локальный .gitignore
- Правила личного игнорирования
- Глобальный .gitignore
- Игнорирование ранее зафиксированных файлов
- Файл отладки .gitignore
- Отображение всех игнорируемых файлов
- Заключение
- Файл gitignore — примеры и документация
- Для чего нужен .gitignore
- Где должен находиться этот файл
- Подробнее о шаблонах игнорирования
- Что если файлы из gitignore уже добавлены в репозиторий
- Как понять, почему игнорируется конкретный файл
Настройка глобального файла .gitignore
Как вычистить мусор из файла .gitignore
Просматривая различные pull requests, можно часто видеть, как участники незаметно добавляют конфигурацию редактора в файл .gitignore репозитория
Такое поведение, когда каждый программист принимает свои правила .gitignore, относящиеся к окружающей среде, приводит к тому, что у нас создается длинный список всякого мусора! Но мой или ваш репозиторий не должен заботиться о конфигурации вашего редактора.
Есть лучшее решение для этого: личный глобальный файл .gitignore для всех ваших репозиториев. Вот как вы можете его настроить.
Как создать глобальный .gitignore
Сначала создайте файл .gitignore для ваших глобальных правил, например, где-нибудь в своем домашнем каталоге.
Затем откройте его в любом текстовом редакторе и добавьте все файлы и папки, которые вы всегда хотите игнорировать. Вот как выглядит моя глобальная конфигурация:
Вероятно, у вас будет как минимум две записи в вашем глобальном .gitignore: одна для файлов, специфичных для операционной системы, и одна для файлов, специфичных для редактора.
Я использую платформу IntelliJ IDEA, поэтому мне нужно игнорировать папки .idea создаваемую тем же редактором кода PHPStorm. Если бы я был пользователем Mac, мне нужно было бы игнорировать, например, файлы .DS_Store, создаваемые macOS. А если бы я был пользователем Windows с Visual Studio Code в качестве основного редактора, мой .gitignore файл, вероятно, выглядел бы так:
Наконец, настройте git для использования нашего вновь созданного файла
Если вы пользователь Windows, вам нужно будет отформатировать путь по-другому.
Вот и все, больше никаких надоедливых настроек редактора в ваших коммитах!
Веб-разработчик со стажем программирования более 9 лет, всегда в процессе учебы и созидания.
Источник
Игнорирование файлов и каталогов в Git (.gitignore)
Главное меню » Статьи » Игнорирование файлов и каталогов в Git (.gitignore)
Файл .gitignore определяет, какие файлы неотслеживаемого Git следует игнорировать.
Какие файлы следует игнорировать?
Игнорируемые файлы – это, как правило, специфичные для платформы файлы или автоматически созданные файлы из систем сборки. Некоторые общие примеры включают в себя:
- Файлы времени выполнения, такие как журнал, блокировка, кэш или временные файлы.
- Файлы с конфиденциальной информацией, такой как пароли или ключи API.
- Скомпилированный код, такой как .class или .o.
- Каталоги зависимостей, такие как /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.[a-c].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 доступны другим разработчикам и должны содержать шаблоны, которые полезны для всех остальных пользователей хранилища.
Правила личного игнорирования
Шаблоны, которые являются специфическими для вашего локального хранилища и не должны распространяться на другие хранилища, должны быть установлены в файле .git/info/exclude.
Например, вы можете использовать этот файл для игнорирования сгенерированных файлов из ваших личных инструментов проекта.
Глобальный .gitignore
Git также позволяет вам создать глобальный файл .gitignore, в котором вы можете определить правила игнорирования для каждого репозитория Git в вашей локальной системе.
Файл может быть назван как угодно и храниться в любом месте. Наиболее распространенным местом для хранения этого файла является домашний каталог. Вам придется вручную создать файл и настроить Git для его использования.
Например, чтобы установить
/.gitignore_global в качестве глобального файла игнорирования Git, вы должны сделать следующее:
- Создайте файл:
- Добавьте файл в конфигурацию Git:
- Откройте файл в текстовом редакторе и добавьте в него свои правила.
Глобальные правила особенно полезны для игнорирования определенных файлов, которые вы никогда не хотите зафиксировать, таких как файлы с конфиденциальной информацией или скомпилированные исполняемые файлы.
Игнорирование ранее зафиксированных файлов
Файлы в вашей рабочей копии могут быть отслежены или не отслежены.
Чтобы игнорировать файл, который был ранее зафиксирован, вам нужно удалить его из индекса и удалить его из индекса, а затем добавить правило для файла в .gitignore:
Опция –cached говорит мерзавцу , чтобы не удалить файл из рабочего дерева , но только, чтобы удалить его из индекса.
Чтобы рекурсивно удалить каталог, используйте параметр -r:
Если вы хотите удалить файл как из индекса, так и из локальной файловой системы, опустите опцию –cached.
При рекурсивном удалении файлов используйте опцию -n, которая выполнит «пробный запуск» и покажет вам, какие файлы будут удалены:
Файл отладки .gitignore
Иногда бывает сложно определить, почему конкретный файл игнорируется, особенно когда вы используете несколько файлов .gitignore или сложные шаблоны. Вот тут-то и пригодится команда git check-ignore с опцией -v, которая говорит git отображать подробности о соответствующем шаблоне.
Например, чтобы проверить, почему файл www/yarn.lock игнорируется, вы должны выполнить:
Выходные данные показывают путь к файлу gitignore, номер совпадающей строки и фактический шаблон.
Команда также принимает более одного имени файла в качестве аргументов, и файл не обязательно должен существовать в вашем рабочем дереве.
Отображение всех игнорируемых файлов
Команда git statusс параметром –ignored отображает список всех игнорируемых файлов:
Заключение
Файл .gitignore позволяет исключить из списка проверяемых файлов в хранилище. Файл содержит шаблоны смещения, которые описывают, какие файлы и каталоги следует игнорировать.
gitignore.io – это онлайн-сервис, позволяющий создавать файлы .gitignore для вашей операционной системы, языка программирования или IDE.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Файл gitignore — примеры и документация
Для чего нужен .gitignore
Файл .gitignore используется для того, чтобы определить, какие файлы и папки не нужно добавлять в git репозиторий.
Мы конечно могли бы вручную добавлять нужные файлы в репозиторий, например так:
Однако это было бы очень трудоемко. Гораздо проще использовать команду:
Которая добавит все файлы в каталоге проекта.
Но что если нам не нужны абсолютно все файлы, а есть файлы например в каталоге /cache или /images или /runtime проекта, которые генерируются в процессе работы. Они не должны быть добавлены в репозиторий.
Тут нам и нужен .gitignore. Вам нужно его самим создать и разместить в корне проекта либо нужной подпапке.
Где должен находиться этот файл
Файл может находиться в корне проекта или любом подкаталоге.
Либо можно задать глобальный файл gitignore, таким образом:
Таким образом вы сможете записать в глобальный файл
/.gitignore_global настройки, общие для всех ваших проектов. В нем могут храниться например файлы для игнорирования, которые специфичны для вашей IDE, и по этому не логично добавлять их в репозиторий. Однако файлы, которые специфичны для конкретного проекта, обязательно нужно добавлять в .gitignore самого проекта.
Примеры содержимого .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 | Знак вопроса соответствует строго одному символу. |
debug6.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 уже добавлены в репозиторий
Обратите внимание, что если файлы уже добавлены в git репозиторий, то добавление их в .gitignore не удалит эти файлы. Изменения в них будут продолжать отслеживаться и входить в коммиты, несмотря на то, что они есть в .gitignore .
Нам придется вручную их удалить из репозитория.
Очень удобная команда bash, которая удалит из git репозитория те файлы, которые содержатся в файлах .gitignore :
То же самое для Powershell
При выполнении этой команды, файлы останутся у вас на диске, однако из репозитория они будут удалены.
Либо можно удалять файлы вручную, таким образом:
Либо если нам нужно удалить целую директорию из git, то воспользуемся следующей командой:
Либо так мы могли бы удалить все файлы с расширением .log в папке log:
Параметр —cached означает, что файлы будут удалены только из раздела «проиндексированных файлов». На диске (рабочем каталоге) они останутся нетронутыми.
Как понять, почему игнорируется конкретный файл
Запустите команду вместо path/to/file следует указать путь к файлу.
В итоге мы получим ответ, в котором содержится конкретная строка .gitignore, благодаря которой данный файл игнорируется.
Отобразить все игнорируемые файлы:
Очистить проект от всех игнорируемых файлов:
Используйте с осторожностью. Убедитесь что у вас есть резервная копия.
Источник