Вопрос №426 от пользователя Evgeniy Serbinov в уроке «Игнорирование файлов в Git», курс «Основы Git»

Evgeniy Serbinov

Список отслеживаемых файлов полностью соответствует, решение не принимается. Выдает ошибку: ruby test_solution.rb "[ OK ] Empty repository exist!" [ FAIL ] Incorrect ignore settings Makefile:2: recipe for target 'test' failed make: * [test] Error 1.

8 0

Andrew Kumanyaev

Можете показать свой файл .gitignore?

0

Andrew Kumanyaev

У вас все правильно, кроме 2-х мест:

Первые 4 правила содержат одну и ту же ошибку - в задании нужно рассматривать от корня директории.

README.MD

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

p.s. Как пройдете практику, удалите, пожалуйста свой комментарий, чтобы он не был подсказкой другим.

0

Evgeniy Serbinov

В задании нигде не сказано что необходимо прописывать путь от корня директории, что касается файла README.MD если это принципиальная ошибка, почему тогда правило работает? Список отслеживаемых файлов, не смотря на пять!!! ошибок, был правильный. Не могли бы вы описать ситуацию в которой эти ошибки привели бы к игнорированию либо наоборот отслеживанию не тех файлов? Извините за дотошность, не могу заниматься когда не все понятно. Заранее спасибо.

0

Andrew Kumanyaev

Да, конечно. Я планировал поподробнее описать, только сейчас время появилось.

По поводу файла Readme - тут есть ряд подводных камней.

Прочувствуйте разницу скобминировав разные варианты:

*.MD
!/README.MD
*.md
!/README.MD
*.MD
!/README.md
*.md
!/README.md

Работать будут только 2 из 4-х. Кстати, насколько я помню - в вашем случае был второй вариант.

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

Игнорируем собак
!Кроме питбулей
Игнорируем кошек
!Кроме питбулей

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

Если посмотреть в исходники git (если интересно - могу показать конкретные строчки), то можно заметить, что при сравнении путей, символы могут приводиться к одному регистру (upper, lower), а могут и не приводиться (в частности это зависит от кодировки). В случае с отменой правила - это как исключение. Git не проходит по каждому правилу и не сранивает с ним строку. Изначально он формирует структуру, в которой описано то, по каким шаблонам нужно игнорировать файлы, а потом в один проход делает сопоставление. Если правило, начинающееся с ! не покрывается шаблонами, описанными выше - то оно игнорируется. И в итоге получилось, что файл README.md будет проигнорирован.

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

1

Andrew Kumanyaev

По поводу вопроса, касаемо теста - отвечу позже.

0

Evgeniy Serbinov

Спасибо огромное, очень подробно и понятно. Единственное что меня по прежнему смущает, если /tmp/ является частным случаем tmp/ то он, на сколько я понимаю должен срабатывать только для директории tmp расположенной в корне, а шаблон tmp/ для всех каталогов. У нас в практике в каталоге test так же имеется папка tmp и в ней файл .keep который подпадает под правила исключения и тоже отслеживается как и файлы .keep в каталогах tmp и log расположенных в корне. Собственно это и есть причина по которой я указал шаблон без привязки к корню, так как считал что для файла test/tmp/.keep так же должно применяться исключение. По вопросу из теста разобрался, там вместо **/*/.* отображалось *//.*

0

Andrew Kumanyaev

Я думаю - это не критично и сути практики не меняет. Пусть это будет нашей небольшой пасхалкой.

0

Andrew Kumanyaev

Вопрос в тесте исправил, теперь должно нормально отображаться

0

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
25 мая 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
25 мая 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
25 мая 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
25 мая 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
25 мая 5 месяцев