Как стать автором
Поиск
Написать публикацию
Обновить

ПШЕ AndroidStudio или как использовать VCS Tools по полной

Время на прочтение4 мин
Количество просмотров16K

ПШЕ AndroidStudio или как использовать VCS Tools по полной


- Все хорошо, только перед влитием обязательно засквошь коммиты.
- Заскво...Что?

Примерно такая реакция была у меня после получения апрува первого пул реквеста на первой неделе работы в одной крупной компании. Причина такой реакции весьма простая — далеко не каждый заказчик/работодатель может себе позволить такую роскошь как большая команда на одну платформу, в особенности это касается мобильной разработки. Из-за ненадобности и возможности быстрой коммуникации в своем мирке, далеко не все вещи, которые используют крупные мастера своего дела, обретают актуальность в небольших командах. Говоря проще — а на кой мне это надо, если мы и так хорошо без этого жили и хорошо справлялись?


После перехода в новую компанию я столкнулся с той же проблемой, но уже по другую сторону баррикад. Если вы еще не догадались о чем пойдет речь дальше — это GIT, говоря точнее, его встроенный инструментарий в AndroidStudio и как он позволяет сделать нашу работу проще.


Я постараюсь не обращать внимания на банальные вещи: init VCS; new/rename/push branch; rebase/merge onto branch; setup remotes e.t.c. Я постараюсь обратить внимание на те элементы, которые по боязни своего незнания, я долгое время избегал(и жалею).


Amend commit


В случае, когда Вы решили дополнить свои изменения к последнему коммиту, стоит воспользоваться следующей коммандой:


// Дополнит последний коммит изменениями без изменения сообщения
git commit --ammend
// Дополнит и изменит сообщение последнего коммита
git commit --ammend "New commit message"

А можно ускорить процесс:


image


Edit commit message


Допустим, Вы создали большой PR с большим количеством коммитов, да перед пушем заметили, что одно из сообщений некорректно и было бы неплохо его отредактировать, пока жесткий ревьювер не четвертовал Вас за такую оплошность:


image


Interactive rebase


Я боюсь представить выполнение одной из недавних задач по рефакторингу без знаний использования этого инструмента. Проблема заключалась в том, что мне нужно было отрефакторить N файлов. Каждое изменение следовало делать отдельным коммитом, чтобы не собирать большую пачку в одну кучку и была возможность отдельного форсирования каждого из файлов/коммитов в будущем.


Пачка была быстро собрана, коммиты получились хаотичные, да еще и на ревью получил порцию исправлений… Окей, не проблема.


Проверяем отставание наших изменений от ветки, в которую мы хотим вливаться.


//Покажет хеши и коммит мессаджи
git cherry master -v 
// Подсчитает нам количество отставших коммитов
git cherry master | wc -l 

Либо через GUIню:


image


Дальше скачем в tools:


image


Указываем количество коммитов, которые хотим отредактировать:


git-rebase-2

Или сразу укажем таргeт ветку:


image


Дальше определяемся что нам нужно сделать:


image


И редактируем:


image


Подробнее про команды:


# Commands:
#  p, pick = использовать коммит(оставить при своем)
#  r, reword = использовать коммит, но отредактировать его сообщение
#  e, edit = редактирование коммита, без возможности amend-а(без слияния)
#  s, squash = слить с предыдущим коммитом с возможностью редактирования итогового сообщения
#  f, fixup = аналог сквоша,без возможности редактирования сообщения(отбросит сообщение коммита который сливаем)

Коммиты отредактированы, осталось только подлить все на ремут сервер. Но ведь история изменена? И хэши явно не совпадают с тем, что находится на удаленной ветке.


image


Force push перезатрет нашу историю и примет новые изменения как родные.


Multiple remotes


Скорее всего это лишнее, но, исходя из моей практики, далеко не все обращают внимание на эту фичу.


image


Что это? В случае работы в 2 и более ремут хранилищах(актуально, когда доступ в основное хранилище по прямому запросу закрыт), быстрое переключение между удаленным ветками для пушей/пулов тоже упрощен:


image


Git blame


Полезный трюк для просмотра автора внесенных изменений:


image


Теперь про более эффективную работу. Если Вы не поленились и внесли правила ведения коммитов в Вашем проекте, стоит включть IssueNavigationLink:


//Пример паттерна формирования коммит мессаджа
<PROJECT_ID>-<TASK-ID>: <COMMIT MESSAGE>

(Кроме всего этого, Вы можете настроить проверку формирования коммит мессаджа с помощью git-hooks — https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
Отредактируем файл project/.idea/vcs.xml:


image


Подбросим свою регулярку для анализа коммит месаджа:


<IssueNavigationLink>
    <!--Регулярное выражение в зависимости от Вашего паттерна-->
    <option name="issueRegexp" value="([A-Za-z]+\-)(\d+)" />
    <!--Адрес для подстановки Вашей задачи-->
    <option name="linkRegexp" value="https://github.com/IlyaPavlovskii/Android-Environments/issues/$2" />
</IssueNavigationLink>

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


image


Git cherry-pick


Не путать с командой cherry!


Допустим, Вы работаете над фичей/фиксом, во время работы заметили блокирующий Вас баг и поправили его, да всю свою работу не закончили и в рабочую ветку не влились. Ваши компаньоны отрепортили, что проблема блокирует не только Вас, но и кого-то другого, и было бы неплохо поделиться им. Но Вы все еще работаете над своей задачей, а отвлекаться нет желания… В таком случае, будет проще всего забрать Ваш 1 коммит в другую ветку и экстренно вмержить его в рабочую (фризную ветку). Как это сделать?


image


image


Готово:


image


Заключение


В заключении хотелось бы сразу вспомнить вечный холивар на тему: терминал или GUI редактор для работы с VCS? Тут дело вкусовщины. Понятно дело, что CLI GIT-а более мощный инструмент и для спецефичных задач без него никуда. Но для ежедневных задач встроенный пакет утилит для работы с системами контроля версий в AS — просто must have и сократит время разработки в разы.
Надеюсь, что Вы нашли что-то новое в этой статье и помог облегчить Ваши трудовые будни.

Теги:
Хабы:
Всего голосов 21: ↑16 и ↓5+18
Комментарии31

Публикации

Ближайшие события