Читая образовательные статьи о системе контроля версий git, я заметил одну вещь: большинство из них направлены на то, чтобы читатель понял все преимущества распределенной системы контроля версий.
В этом разделе обычно говорится об удаленных репозиториях, ветках, push-уведомлениях, пулах и т. д. Но при использовании инструмента возникает момент (особенно если вы изучаете его с помощью различных форумов, форумов, статей в Интернете), когда кажется, что вы уже приобрели достаточно знаний по работе с ним, но все равно чувствуете, что в чем-то Временами ты немного плывешь.
Вот и пришло время взять в руки нормальную книгу и начать читать ее от корки до корки.
Конечно, возможно, этот подход следует применять с самого начала.
его может быть даже и нет, но его следует применять с самого начала, но, как обычно, не всегда хватает времени, сил, желания и т. д. для нормальная учеба.
Но статья совсем не об этом.
Я хочу рассказать вам о двух замечательных командах git, которые я недавно обнаружил.
Это git виноват и git bisect
Аннотация к файлу
Нередка ситуация, когда вы обнаруживаете в коде какой-то баг и вам становится жутко любопытно, кто и когда это все написал.(Конечно, я тоже хочу знать, о чем он думал и где нажимал кнопки, но тут, конечно, мерзавец бессилен) git Assessment позволяет вам увидеть, когда и кем в последний раз редактировалась каждая строка файла.
Следующая команда
покажетgit blame -L 12,22 products.php
ebf9cf99 (vasia 2011-11-16 15:07:52 +0400 260)$templates = $controller->getTemplates();
ebf9cf99 (vasia 2011-11-16 15:07:52 +0400 261) foreach($templates as $value)
Вывод содержит короткий хэш коммита, автора, дату последней модификации и сам код. Вы сможете быстро переключиться на нужный коммит и понять причину поломки.
Также стоит отметить, что если указать для команды опцию -C, то можно увидеть, где в репозитории изначально появился нужный фрагмент кода, независимо от того, в какой файл он был изначально добавлен.
git blame -L 10,19 -C Controller.php
3351a8dc /logistics/pages/Controller.php (vasia 2012-01-24 15:26:04 +0400 10)
0cb0d219 /orders/pages/Controller.php vasia 2012-01-13 09:51:54 +0400 16)
Удивительно потом обнаружить, что автором этих изменений является никто иной, как вы сами)
Бинарный поиск
Вторая особенность, о которой хотелось бы рассказать, — это возможность бинарного поиска по коммитам.В качестве примера приведу следующую ситуацию.
В нашем проекте сломался какой-то функционал, мы не можем понять, в чём именно проблема, но точно знаем, что этот функционал точно работал в прошлом релизе.
Итак, команда bisect позволяет нам легко откатить проект на заданное количество коммитов и найти тот коммит, в котором неуловимая ошибка появляется впервые.
Сначала мы запускаем поисковую систему и устанавливаем значение, указывающее, что текущее состояние проекта не работает. git bisect start
git bisect bad
Далее откатываемся к рабочему состоянию проекта — 10 коммитов назад в истории.
git bisect good HEAD~10
Посмотрим, проявится ли этот баг в текущем состоянии.
Допустим, сейчас с проектом все в порядке, поэтому продолжаем поиск дальше.
git bisect good
Эта команда перематывает состояние проекта на середину, между хорошим коммитом и плохим, т.е.
у нас теперь пять коммитов назад в истории.
Если ошибка появляется, то она находится до текущего коммита; если нет, то после этого.
С каждой такой итерацией расстояние уменьшается вдвое, пока мы не найдем плохой коммит (а главное, его автора, к сожалению, мы сделали это снова).
После завершения поиска сбросьте репозиторий в исходное состояние.
git bisect reset
Возвращаясь к введению, хочу сказать, что в обучении Гите для меня книга, которая расставила бы все точки над i, была Вот этот .
Возможно, это не самое подробное изложение, но, на мой взгляд, для перехода от состояния «я могу сделать это» к состоянию «я могу сделать это и понимаю, почему нужно сделать это именно так» очень хороший вариант. Есть и ее перевод (правда, не совсем полный) на русский язык.
На этом я хочу закончить свой рассказ, надеюсь описанный функционал будет полезен в работе не только тем, кто только открывает для себя git. УПД.
Эта функция также существует для Mercurial, спасибо ретран вина - hg annotate И для поиска есть специальный плагин — mercurial.selenic.com/wiki/BisectExtension Для SVN есть svn обвиняет TARGET[@REV] Теги: #git #blame #bisect #git
-
О Ооп
19 Oct, 24 -
Регистрация Торговой Марки
19 Oct, 24 -
Выбор – Это Свобода.
19 Oct, 24 -
Альтернативный Slf4J-Логер «Reel»
19 Oct, 24