Как обновить Git репозиторий, чтобы он начал распознавать новый файл .gitignore и игнорировать указанные в нём файлы?
Чтобы сделать Git-репозиторий распознававшим недавно добавленный файл .gitignore и игнорирующим указанные файлы, необходимо добавить файл .gitignore в репозиторий, удалить уже отслеживаемые файлы, которые должны быть проигнорированы, и выполнить коммит изменений. Git автоматически применит правила игнорирования к файлам, которые еще не отслеживаются, но вам потребуется вручную удалить файлы, которые уже были закоммичены и теперь должны быть проигнорированы.
Содержание
- Добавление файла .gitignore
- Обработка уже отслеживаемых файлов
- Проверка правил .gitignore
- Лучшие практики и распространенные проблемы
- Расширенные техники .gitignore
Добавление файла .gitignore
Сначала создайте или добавьте файл .gitignore в ваш репозиторий:
# Создать новый файл .gitignore
touch .gitignore
# Или добавить существующий файл .gitignore
git add .gitignore
Добавьте файл .gitignore в область подготовки и выполните коммит:
git add .gitignore
git commit -m "Добавить файл .gitignore"
После коммита Git автоматически будет игнорировать любые файлы, соответствующие шаблонам в .gitignore, которые еще не отслеживаются. Однако файлы, которые уже были отслежены в репозитории до добавления файла .gitignore, продолжат отслеживаться, если вы специально их не удалите.
Обработка уже отслеживаемых файлов
Наиболее распространенная проблема при добавлении .gitignore в существующий репозиторий заключается в том, что файлы, соответствующие шаблонам игнорирования, уже отслеживаются Git. Вот как это обработать:
Метод 1: Удалить файлы из Git, но оставить их локально
Если вы хотите удалить файлы отслеживания Git, но оставить их в рабочем каталоге:
# Удалить файлы из отслеживания Git
git rm --cached filename.txt
git rm --cached directory/
Флаг --cached указывает Git удалить файл из области подготовки и истории репозитория, но оставить его в локальной файловой системе.
Метод 2: Полностью удалить файлы
Если вы хотите полностью удалить файлы из Git и вашей локальной файловой системы:
# Полностью удалить файлы
git rm filename.txt
git rm -r directory/
Метод 3: Использовать Git Update-Index
Для отдельных файлов, отслеживание которых вы хотите прекратить:
# Обновить индекс, чтобы удалить файл из отслеживания
git update-index --assume-unchanged filename.txt
Это указывает Git прекратить отслеживание изменений в файле, но он остается в истории репозитория.
Пример полного рабочего процесса
Вот полный рабочий процесс для добавления .gitignore и обработки уже отслеживаемых файлов:
# 1. Добавить .gitignore в область подготовки
git add .gitignore
# 2. Удалить уже отслеживаемые файлы, которые должны быть проигнорированы
git rm --cached node_modules/
git rm --cached dist/
git rm --cached *.log
# 3. Выполнить коммит изменений
git commit -m "Добавить .gitignore и удалить игнорируемые файлы из отслеживания"
# 4. Проверить изменения
git status
Проверка правил .gitignore
После настройки файла .gitignore вы должны проверить, что он работает правильно:
Проверить статус Git
Выполните git status, чтобы увидеть, какие файлы отслеживаются. Файлы, соответствующие вашим шаблонам .gitignore, не должны появляться в выводе.
Использовать Git Check-Ignore
Вы можете проверить конкретные файлы, чтобы увидеть, игнорируются ли они:
# Проверить, игнорируется ли конкретный файл
git check-ignore filename.txt
# Проверить с подробным выводом, чтобы увидеть соответствующий шаблон
git check-ignore -v filename.txt
Тестовый запуск с Git Clean
Чтобы увидеть, что будет удалено, если вы выполните команду clean:
# Показать, что будет удалено (тестовый режим)
git clean -n
# Показать игнорируемые файлы
git ls-files --ignored --exclude-standard --others
Лучшие практики и распространенные проблемы
Распространенные шаблоны .gitignore
Вот полезные шаблоны .gitignore для распространенных сред разработки:
# Node.js
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Python
__pycache__/
*.py[cod]
*$py.class
.Python
venv/
env/
# macOS
.DS_Store
.AppleDouble
.LSOverride
# Windows
Thumbs.db
ehthumbs.db
Desktop.ini
Лучшие практики
- Создавайте .gitignore рано: Добавляйте
.gitignoreперед началом работы над новым проектом - Проверяйте перед коммитом: Используйте
git status, чтобы убедиться, что нежелательные файлы не отслеживаются - Делитесь .gitignore: Выполняйте коммит файла
.gitignore, чтобы другие участники команды могли его использовать - Используйте конкретные шаблоны: Будьте как можно более конкретны, чтобы случайно не проигнорировать важные файлы
Распространенные проблемы и решения
Проблема: Файлы все еще появляются в git status после добавления .gitignore
Решение: Файлы уже были отслежены - используйте git rm --cached, чтобы удалить их из отслеживания
Проблема: .gitignore не работает для определенных файлов
Решение: Проверьте опечатки в шаблонах, убедитесь, что шаблоны относительны к корню репозитория
Проблема: Хотите игнорировать все файлы в каталоге, кроме определенных
Решение: Используйте отрицательные шаблоны:
# Игнорировать все в каталоге/
directory/*
# Но сохранить определенные файлы
!directory/important-file.txt
Расширенные техники .gitignore
Правила сопоставления шаблонов
Git использует шаблоны glob со следующими специальными символами:
*соответствует любому символу, кроме слэшей**соответствует вложенным каталогам?соответствует любому одиночному символу[abc]соответствует любому символу внутри скобок[a-z]соответствует любому символу в диапазоне!отрицает шаблон
Отрицательные шаблоны
Вы можете использовать ! для отрицания шаблонов и включения файлов, которые в противном случае были бы проигнорированы:
# Игнорировать все файлы .log
*.log
# Но сохранить build.log
!build.log
Файлы .gitignore, специфичные для каталога
Вы можете создавать файлы .gitignore в подкаталогах для локального применения правил:
project-root/
├── .gitignore
├── src/
│ └── .gitignore
└── docs/
└── .gitignore
Глобальный .gitignore
Вы также можете создать глобальный файл .gitignore, который применяется ко всем вашим Git-репозиториям:
# Создать глобальный .gitignore
git config --global core.excludesfile ~/.gitignore_global
Комбинирование нескольких файлов .gitignore
Git считывает файлы .gitignore в следующем порядке:
- Файлы, указанные в конфигурации
core.excludesfile .gitignoreв корне репозитория.gitignoreв подкаталогах- Файл Info/exclude в репозитории
Заключение
Добавление файла .gitignore в существующий Git-репозиторий требует выполнения нескольких ключевых шагов для правильной работы. Помните, чтобы:
- Добавить и выполнить коммит файла .gitignore, чтобы он стал частью вашего репозитория
- Удалить уже отслеживаемые файлы с помощью
git rm --cachedдля файлов, которые теперь должны быть проигнорированы - Проверить, что правила работают с помощью
git statusиgit check-ignore - Следовать лучшим практикам, таким как создание .gitignore на раннем этапе и его разделение с командой
Наиболее распространенная ошибка - забывать, что Git применяет правила игнорирования только к неотслеживаемым файлам. Для файлов, которые уже были закоммичены, вам необходимо явно удалить их из отслеживания с помощью флага --cached. При правильной настройке ваш файл .gitignore поможет поддерживать репозиторий чистым и сфокусированным только на важных файлах.