Пара прийомів роботи з git

Під час читання навчальних статей про систему контролю версій git я помітив одну властивість, більшість з них спрямована на те, щоб читач усвідомив усі плюси розподіленої системи контролю версій. У цьому розрізі зазвичай розповідають про віддалені репозиторії, гілки, пуші, пули і т.д.

Звичайно, може бути такий підхід слід застосовувати із самого початку… навіть не може бути, а потрібно застосовувати із самого початку, але на нормальне вивчення як завжди не завжди вистачає часу, сил, бажання тощо.

Анотація файлу

Не рідко трапляється ситуація, коли знаходиш у коді якийсь баг у страшно стає цікаво, хто ж це все написав і коли. (Ще, звичайно, хочеться знати, що він при цьому думав і яким місцем тиснув на кнопки, але тут звичайно гіт безсилий)

git blame дозволяє подивитися коли та ким редагувався кожен рядок файлу в останній раз.

git blame -L 12,22 products.php

Ще, варто зазначити, що якщо для команди вказати опцію -С, то можна побачити, звідки необхідний фрагмент коду з'явився спочатку в репозиторії, будь-який файл він був доданий спочатку.

git blame -L 10,19 -C Controller.php

Бінарний пошук

Друга можливість, про яку я хотів би розповісти, — це можливість бінарного пошуку по комітах. Наприклад наведу таку ситуацію. У нашому проекті зламався якийсь функціонал, у чому конкретно проблема ми зрозуміти не можемо, але точно знаємо, що в минулому релізі цей функціонал точно працював. Так ось команда bisect дозволяє нам легко відкотити проект на задану кількість коммітів і знайти той коміт, в якому невловимий баг проявляється вперше.

По-перше, запускаємо механізм пошуку та встановлюємо значення, що поточний стан проекту неробочий

Далі відкочуємось наробочий стан проекту – на 10 коммітів тому з історії

git bisect good HEAD

Дивимося, чи проявляється цей баг у поточному стані. Припустимо, зараз із проектом все добре, тому продовжуємо пошук далі

git bisect good

Після завершення пошуку скидаємо репозиторій у вихідний стан

git bisect reset

Повернувшись до вступу, хочу сказати, що в навчанні гіту для мене такою книгою, яка б розставила всі крапки над нею, стала ось ця. Може бути не докладний виклад, але, на мій погляд, для переходу від стану «я можу це зробити» до стану «я можу це зробити і розумію, чому потрібно робити саме так» дуже хороший варіант. Є і її переклад (щоправда, не зовсім повний) українською мовою.

На цьому розповідь свою хочу закінчити, сподіваюся описаний функціонал буде корисним у роботі не тільки тим, хто тільки відкриває для себе git.

UPD.Для меркуріал даний функціонал теж існує, дякую retran blame — hg annotate А для пошуку є спеціальний плагін — mercurial.selenic.com/wiki/BisectExtension

Для svn є svn blame TARGET[@REV]

Хардкорна конфа за С++. Ми запрошуємо лише профі.