Как я перестал бояться и полюбил git

ноябрь 9 , 2018

Я люблю git 2014 год. Веб-разработчики осваивают Angular и Laravel, пакетные менеджеры, инструменты сборки фронта, пробуют PostgreSql и MongoDB. Я ВНЕЗАПНО понимаю, что фрилансить в Питере за 15 тысяч в месяц это не так круто, как я всем рассказываю, и начинаю искать нормальную работу. Составляю сногсшибательное резюме: html, css, js/jquery (ага, прям так), php, mysql. Коммуникабельный, ответственный, стрессоустойчивый. Рассылаю резюме и жду шквала звонков.


Собеседование. Все знают, а я нет

Звонят из сбербанка. Не нынешний сбертех, а именно сбербанк, наш, советский. Прихожу. Отсидев положенную очередь, попадаю к нескольким чувакам. Один из них вскользь спрашивает, работал ли я с гитом? Отвечаю "нет" и с улыбкой мудрого Юпитера рассказываю, дескать, гит хорош для работы в больших командах и проектах, а для фрилансеров вроде меня "он не нужен". Чувак с отеческой теплотой и вниманием слушает мои рассуждения, а после деликатно говорит. Мол, дело твое, конечно, но мне, например, даже домашние проекты стремно без гита делать. Мол, гит это не только команды, а версионирование и прочее-прочее. В общем, советует разобраться с темой. Я благодарно киваю, но не верю. Ибо и так успешно версионирую все подряд винраром. Включая логи и временные файлы. Но слова чувака в памяти отложились.


Первый опыт. Смех и слезы

В итоге я попадаю работать в веб-студию. На гит всем пофиг, работаем так. Но есть хитрость - один полусекретный проект, про который шепотом говорят: ОН ПОД ГИТОМ. Проект важный, занимается им в одну харю тимлид Серега, и вообще он покрыт тайной и крутостью. В смысле, проект, а не Серега. Однако ж со временем задач становится больше, и к этому делу опрометчиво подключают меня.

Серега дает краткую вводную по гиту, устанавливаем его, клонируем проект и я начинаю разбираться. Первые впечатления: дивный мир. Помню тот волшебный момент, когда я создал новую ветку. У меня теперь ИХ ДВЕ. А успешный мердж в основную ветку вызывает еще больший восторг. Постепенно я осваиваю ветки, переключение между ними, мерджи. А вот пуши даются тяжелее, потому как я совершенно забываю про пулы. А че, разве тут еще кто-то кроме меня есть?

Несмотря на такие невероятные успехи, любая нестандартная ситуация вызывает ступор. Это когда у ребенка падает игрушка на пол, а он еще не знает, как наклоняться за ней. И начинает орать.

ААА, оно тут чего-то красное! Серега подходит, резолвит конфликты. Объясняет, в чем смысел его действий.
ААА, оно не пушится! Серега напоминает, что нужно предварительно пулиться.
ААА, оно куда-то вошло и не выходит! Серега подходит и, правильно, показывает, как выходить из vim-а.

Ну ладно вам смеяться, у всех же такое было. Хм, или не у всех?


Тысячекратно добрым словом вспоминаю Серегу. Не знаю, как он это выдержал. Вспомню, аж бесит собственная тупость. Это сейчас смешно вспоминать, но тогда реально было непонятно, почему эта хрень работает так или иначе. Почему нельзя пушить без пула или почему иногда ветки сливаются без конфликтов, а иногда с ними. Для меня это была чистая лотерея. Мерджишь и надеешься, авось, сейчас пронесет.

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

Тем не менее, разбираться надо. Я рискую и решаю посадить домашний проектик на гит. Изрядно употев, все-таки ставлю все, что нужно, заливаю проект на хипстерский bitbucket, делаю первый пуш и счастливый ложусь спать. Все. С этого момента я начинаю каждый день работать с гитом.


Спокойно работаю. Гит - это удобно

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

Когда коллеги впервые увидели, как я открываю командную строку, создаю там новую ветку и смотрю git log, на меня посмотрели как на пещерного человека. Открыли IDEA и показали, как это делается там. Не скажу, что я был поражен громом и ахуем, но впечатлен был точно. Я же до этого работал максимум с саблаймом и нормальных инструментов визуализации не видел.

Впрочем, первое впечатление проходит и я по-прежнему работаю с гитом в консоли. Исключение составляют git diff и git log. Изменения реально лучше смотреть в красивых окошках цветными буковками. Впрочем, это только мой взгляд.

На новой работе с гитом мы работаем всегда. Но я уже не напрягаюсь, после серегиных уроков чувствую себя вполне комфортно. По крайней мере, коллег глупыми вопросами уже не отвлекаю. checkout, status, add, commit, pull/push - этого стандартного набора мне вполне хватает.


Учусь дальше

Хватает до тех пор, пока работа не сводит меня с чуваками из другой команды (привет, Леха с код-ревью!) Я периодически коммичу в их репозиторий и делаю мерджреквесты. Ребята же с гитом работают на уровне несколько выше моих текущих привычек. Первые несколько мерджреквестов от меня терпят, но потом начинают задавать деликатные вопросы:

1. Может, не стоит делать отдельный коммит, где ты меняешь шрифт одного элемента с 12 на 14?
2. Зачем лишние мердж-коммиты? git pull --rebase, не? Да-да, --rebase. Да, с двумя черточками. Попробуй, рекомендуем.
3. А давай ты будешь в свою ветку не 10 раз подтягивать мастер, а все-таки ребейзить? Да, git rebase master. Нет, здесь уже без черточек.
4. А не перебор ли присылать мерджреквест из 8 коммитов с изменениями в двух css-файлах? Ну дак сквош коммитов. Ну ребейз в интерактивном режиме. git rebase -i. Вот, разок посмотри, дальше иди гуглить. Молодец, спасибо.
5. Интересно, тебя не заебало делать временные коммиты вместо git stash? А прикинь, в стеше можно не только один набор держать. Да, волшебство...

И тому подобное.


Поначалу меня это несколько раздражает, потому что ОНО И ТАК РАБОТАЕТ. Но когда у тебя на глазах делают какие-то странные вещи, это задевает. Еще больше задевает то, что это занимает 10 секунд, а становится реально лучше. Меньше мелких коммитов, меньше лишних мердж-коммитов, например. Это и становится главным стимулом разбираться дальше в теме. Надо отдать должное ребятам, они не рубят мерджреквесты, но каждый раз напоминают мне, как можно сделать лучше. Таким образом я закрываю задачи, попутно понемногу, по шажочку разбираюсь в этих ребейзах, сквошах и стэшах.


Как я жил без гита раньше?

Домашние проекты уже все сажаются на гит. Пулы и ребейзы делаются на автомате, как проверка почты. Любой новый проект начинается с создания репозитория и .gitignore. Незаметно гит превращается из рабочей необходимости в первую. Если спросите, без чего я не представляю свою работу, то первое, что отвечу - это гит. Без модных IDE, Core i7 и смузи я обойдусь. Без гита - нет.

Я по-прежнему большую часть операций делаю в консоли. Вызывая удивление большинства нормальных коллег и понимание некоторых особо бородатых. Но это уже другая история.

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

Все статьи о git

Что еще почитать

Заходите в группу в контакте - https://vk.com/webdevkin
Анонсы статей, обсуждения интернет-магазинов, vue, фронтенда, php, гита.
Истории из жизни айти и обсуждение кода.
Как Вам статья? Оцените!