Пара Хитростей Для Работы С Git

Читая образовательные статьи о системе контроля версий 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

Вместе с данным постом часто просматривают: