Игнорирование файлов с помощью Gitignore

GitBeginner
Практиковаться сейчас

Введение

В процессе разработки программного обеспечения папка проекта может заполняться файлами, которыми не следует делиться. Например:

  • Временные файлы: создаются редактором или операционной системой, например .DS_Store.
  • Артефакты сборки: скомпилированный код, например .exe и .class.
  • Журналы: файлы с записями о выполнении программы, например debug.log.
  • Секреты: ключи API или пароли. Никогда не добавляйте их в Git!

В Git есть специальный файл .gitignore. Это простой список правил «не отслеживать». Если файл соответствует одному из этих правил, Git по умолчанию оставляет его неотслеживаемым.

Этот механизм задаёт правила для рабочего дерева. Он сообщает Git, какие неотслеживаемые файлы следует считать обычными служебными файлами, а не потенциальными исходными файлами для добавления.

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

В этой лабораторной работе вы:

  1. Создадите «мусорный» файл, который нужно игнорировать.
  2. Настроите файл .gitignore.
  3. Проверите, что Git успешно игнорирует этот файл.

Создание файла журнала

Сначала создайте файл, который будет представлять «мусорные» данные. Представьте, что приложение создаёт файл журнала при каждом запуске. Мы хотим хранить этот файл на локальном компьютере для отладки, но не хотим делиться им с командой или сохранять его в истории репозитория.

Перейдите в каталог проекта:

cd ~/project

Создайте файл debug.log с тестовым содержимым:

echo "System started at $(date)" > debug.log

Убедитесь, что файл существует:

ls

Если теперь выполнить git status, Git увидит этот файл как «Untracked» и продолжит предлагать добавить его.

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

Создание файла .gitignore

Чтобы Git не сообщал о некоторых файлах, создайте специальный файл конфигурации .gitignore.

Создайте этот файл в корневом каталоге проекта:

touch .gitignore

Убедитесь, что файл создан. Помните: он скрытый, поскольку его имя начинается с точки:

ls -a

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

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

Настройка правил игнорирования

Теперь добавьте правило, которое будет игнорировать все файлы журналов.

Используйте шаблон *, чтобы указать «любой файл, имя которого заканчивается на .log».

Добавьте шаблон *.log в файл .gitignore:

echo "*.log" > .gitignore

Проверьте содержимое файла:

cat .gitignore

Вывод:

*.log

Эта строка сообщает Git: «Игнорируй любой файл в этом каталоге и любом подкаталоге, если его имя заканчивается на .log».

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

Проверка статуса игнорирования

Проверьте, работает ли правило.

Выполните git status:

git status

Проанализируйте вывод:

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    .gitignore

Подождите! Где debug.log?

Его больше нет в списке! Это означает, что Git успешно игнорирует файл. Git сообщает только о самом .gitignore — его впоследствии следует добавить в репозиторий, — а debug.log для Git невидим.

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

Чтобы убедиться окончательно, используйте команду check-ignore и спросите: «Почему этот файл игнорируется?»

git check-ignore -v debug.log

Вывод:

.gitignore:1:*.log debug.log

Это означает: «Файл debug.log игнорируется из-за правила *.log, расположенного в строке 1 файла .gitignore».

Итоги

В этой лабораторной работе вы узнали, как поддерживать репозиторий в чистоте.

Основные выводы:

  1. .gitignore: текстовый файл со списком шаблонов, которые Git должен игнорировать.
  2. Подстановочные символы: используйте *, чтобы сопоставить несколько файлов, например *.log.
  3. Неотслеживаемые и игнорируемые файлы: с точки зрения Git игнорируемый файл считается несуществующим, хотя сам файл по-прежнему находится на диске.

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