О файле .gitignore

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

Основной синтаксис:

  • Каждая строка - отдельный шаблон
  • Пустые строки игнорируются
  • Строки начинающиеся с # являются комментариями
  • Символ слеша "/" в начале строки указывает на текущую папку (где лежит .gitignore)
  • Звёздочка(*) заменяет любое количество символов
  • Две звёздочки(**) используются для указания всех подпапок.
  • Восклицательный знак(!) в начале строки инвертирует шаблон (используется для исключений)
  • Для экранирования спецсимволов используется обратный слэш "\". Для игнорирования всей директории, правило должно оканчиваться на слэш(/), в противном случае правило считается именем файла.

В репозитарии gitignore от github собраны примеры gitignore файлов для всех типовых проектов.

Пример .gitignore файла

# Игнорировать файл foo.txt.
foo.txt
# Игнорировать html файлы
*.html
# Но конкретно foo.html не игнорировать
!foo.html
# Игнорировать rar файлы в корне проекта
# Допустим файл /temp/main.rar не будет проигнорирован т.к. он не в корне
/*.rar
# Игнорировать css файлы из папки bar не включая подпапки
# Допустим файл /bar/temp/main.css не будет проигнорирован т.к. он в подпапке temp
/bar/*.css
# Игнорировать js файлы из папки bar и подпапок, если таковые будут
/bar/**.*.js

Как исключит папку из отслеживания, но добавить подпапку?

Задача 1

Убрать папку node_modules, но оставить в ней 2 подпапки jquery и semantic

├── js
│   ├── app.js
│   └── system.js
├── scss
│   ├── system.scss
│   └── theme.scss
└── vendor
    ├── node_modules       <-- Убрать
    │   ├── load-json-file
    │   ├── lodash
    │   ├── jquery         <-- Оставить
    │   ├── make-error
    │   ├── semantic       <-- Оставить
    │   └── yargs
    └── semantic.json

Решение:

/vendor/node_modules/*
!/vendor/node_modules/jquery/
!/vendor/node_modules/semantic/

Задача 2

Убрать папку node_modules, но оставить в её подпапке jquery подпапку dist

├── js
│   ├── app.js
│   └── system.js
├── scss
│   ├── system.scss
│   └── theme.scss
└── vendor
    ├── node_modules       <-- Убрать
    │   ├── load-json-file
    │   ├── lodash
    │   ├── jquery
    │   │   └──dist        <-- Оставить
    │   ├── make-error
    │   ├── semantic
    │   └── yargs
    └── semantic.json

Решение:

/vendor/node_modules/*
/vendor/node_modules/jquery/*
!/vendor/node_modules/jquery/
!/vendor/node_modules/jquery/dist/

Как игнорировать файлы, которые уже отслеживаются?

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

git rm --cached <file>

Например убрать папку storage/framework/cache/. Обратите внимание: вначале отсутствует слеш.

git rm -r --cached "storage/framework/cache/"

По мотивам:

Похожие записи

Добавить пустую папку в git

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