Git: за пределами возможного

Глава 1 51478e64ad420959d95cc923468dd951.jpgВсе началось с того, что мне подарили PipBoy. Очень удобная вещь: захотелось пиццы — набрал команду callPizza () и вот уже курьер везёт тебе горячий круг! «Как здорово!» — думал я.Недавно я устроился на работу в должности программиста. Коллеги мне сразу стали расхваливать систему контроля версий Git. Ну что ж. Раз говорят, что хороший — нужно читать про него. Прочитав первую книгу, в голове был полный сумбур. Я решительно ничего не понимал. «Что за бабуйня такая? Для чего вообще это нужно?» — показалось мне.После тяжёлого трудового дня я направился домой. Был тёплый августовский вечер, во дворе играли детишки. У каждого из них на руке был свой PipBoy. Насколько же проникли технологии в нашу жизнь. Ведь совсем недавно ничего этого не было, а первые образцы стоили сотни тысяч долларов. А вот теперь почти у каждого на руке! Погрузившись в свои мысли, я вовсе не заметил, как из-за угла кто-то выехал на мотоцикле. Мчавшись на огромной скорости, ему было совершенно незаметно людей на дороге. А тем более во дворе.Я получил резкий удар по груди и тут же упал на асфальт. Ещё бы чуть ниже и попал бы в солнечное сплетение, пришлось бы умирать и воскресать. Но головой все же упал хорошо. В глазах резко потемнело, а в ушах загудело. Прошло примерно 15 секунд, пока моё тело пыталось восстановиться от сильного удара. Глаза снова стали картинку. Надо мной склонилась девушка и что-то спрашивала. По губам я прочитал: «Вы в порядке?». Через пару секунд восстановился слух и я смог ответить: «Кажется, да. Сейчас все пройдёт».— Коммиты нужно делать.— Простите, что? — Ну, коммиты — это что-то вроде сохранений состояния.— Это вы сейчас о чем? — Чёрт, ну конечно! Вы же разработчик, верно? Я видела вас в компании CoolTechnologies. Видимо вы устанавливали Git на свой PipBoy? — Да, я разработчик. Но про Git на PipBoy ничего не слышал.— Ну да, он не особо известен и популярен. Пока что. А вообще это чёрная магия! — Ээээ…— Давайте я вам тоже установлю. Но только никому не рассказывайте об этом! Говорить про Git лучше только тем, кто способен его понять и не натворить бед.— Хорошо. Спасибо.

Спустя пару минут на моём PipBoy был запущен шелл, ожидавших ввода команды. Тонкие пальцы быстро набрали git init

— Набирай git commit -am «First commit of my life» — подсказала девушка.

Я набрал команду, нажал кнопку ввода. Git что-то вывел в шелл, но пока что это была тёмная наука.

— Ну вот и все. А теперь смотри! — и она со всего размаху ударила меня в глаз.— Ты что творишь?! — крикнул я, не ожидая такого поворота событий.— Молчи! Пиши в шелл git reset --hard HEAD— Ну и как это мне поможет не убить тебя за то, что ты сделала? — Делай, что говорят! — разозленно сказала она.

И все же я повиновался. Едва я ввёл команду, как боль в глазу исчезла. Я не поверил и провёл рукой по лицу.

— Как будто ничего и не было, — её лицо расплылось в улыбке. — Дальше ты справишься и сам.— Спасибо. Но я так и не узнал как тебя зовут.— Лиза. Удачи! — Спасибо тебе. Удачи!

Глава 2 154bfb1e8331b5dd5a2b0c5361e81a1e.jpgНужно изучать Git! Срочно! Произошедшая со мной история просто поразила меня. Я открыл браузер, зашёл в крупную электронную библиотеку и набрал несколько книг. Захотелось сразу же прочитать, что за две команды подсказала мне девушка. Так, git commit сохраняет текущее состояние, а git reset --hard HEAD отменяет все текущие изменения и возвращает меня к последнему состоянию.«Так, на чем же испробовать…». В голову полезли разного рода мысли. Время было позднее, на работу нужно вставать рано. Немного перекусив и приняв душ, я решил сделать коммит: git commit -am 'Test commit'

После коммита я разделся и лег в кровать. «Кто же эта девушка? Откуда она меня знает? Она сказала, что видела меня в компании, но я её почему-то там не видел. Наверно, просто не обращал внимания. Было бы неплохо ещё раз встретить её, пригласить на ужин и… Так. Давай пока остановимся на этом.» Я ещё немного поворочался, и пелена сна поглотила мой разум. Спалось опять ужасно.

Наступило утро и я чувствовал себя совершенно разбитым. В горле все пересохло, голова жутко разболелась. «Чёрт! А вчера ведь голова так не болела!». И тут меня осенило. Набираю на своём PipBoy уже хорошо запомнившуюся команду git reset --hard HEAD и голова, как будто под действием морфина, расслабляется. «О! А ещё я одетый и сытый! Класс!»

Было решено обязательно взять с собой в дорогу на работу какую-нибудь книгу.

Глава 3 ecf9824073e2f7fa5c13ede30402c278.jpg«Эх, а ведь неплохо было бы, если б я мог одеваться каждое утро в новую одежду. Ну или хотя бы каждый день менять набор одежды.» — думалось мне. Не хочется каждое утро заботиться о том, чтобы погладить другую рубашку и одеть её. Проще и быстрее одевать ту же, что одевал вчера. Вчера я на работе узнал про ветвления и захотелось применить тот же принцип. Так, мне нужно создать новую ветку. Пальцы пробежались по клавиатуре и набрали пока еще новую команду git branch рубашка_понедельник«Так, вроде бы теперь нужно переключиться на эту ветку изменений. Я все же решил заглянуть в учебник по Git, т.к. вчера плохо запомнил эту тему. «Точно! Git checkout!» — и набрал git checkout рубашка_понедельник

Ага, теперь я на новой ветке. Нужно одеться и сохранить состояние. Синяя рубашка с тонкими белыми полосками, черные носки, чёрные брюки и отлично выглаженный пиджак. Галстук? К черту его! Ненавижу, когда мне что-то давит на шею! Делаю коммит и пробую создать ветку на вторник.

❋ git branch рубашка_вторник && git checkout рубашка_вторник

Одену белую рубашку и синий костюм. Похоже, я начинаю чувствовать удовольствие от этого! Все последующие дни я просто смогу возвращаться к этим коммитам и буду сразу одет! Чувство собственной важности росло на глазах.

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

Меняю ветку на рубашка_вторник, одеваю ботинки, смотрюсь в зеркало: идеально сидящая на моем теле обычная домашняя одежда. Не могу понять, что произошло. «Почему? Я же изменил ветку и делал коммит.» Я перепробовал ветки всех дней недели, но результат был тот же самый. Открываю книгу по Git и ищу причину своего промаха. «Ну да, я сделал git checkout. Да, убедился, что есть какие-то изменения в git status. А вот git add забыл! Блин, я забыл в состояние добавить новую одежду. Вся работа насмарку! Лучше бы одевался по-старинке.»

Глава 4 62b0df0799f3182204cc57d6a82812f0.pngРаз можно использовать разные репозитории, то наверняка есть репозитории с улучшениями для тела и прочих вещей. А ещё много людей могут объединиться и сделать суперкрутые улучшения! Целая команда хирургов исправляет ошибки в работе органов! Подумать только! Или, к примеру, команда строителей пробует инновации в строительстве мостов и зданий, не рискуя практически ничем. Возвели фундамент — сохранили состояние, построили этаж — еще раз сохранили. Что-то пошло не так — откатились назад и перепостроили заново участок. Удивительной красоты здания и никакой опасности, что здание не развалится по ходу строительства.

Хм, надо бы найти что-нибудь интересное. Открываю в браузере страницу и ищу что-нибудь на тему команд Git. Но в поисковой выдаче ничего нет. В голове всплыла фраза »… никому не рассказывайте об этом! Говорить про Git лучше только тем, кто способен его понять и не натворить бед…». Похоже про Git и правда знать положено не всем. Нужно попробовать подключиться к анонимной сети и порыскать что-нибудь там! Через какое-то время удалось найти пару интересных проектов.

Первый проект объединяет сотрудников разных медицинских организаций. Вместе они стараются улучшить работу сердца. С сегодняшней экологией все это становится весьма перспективным. Наверняка после множества испытаний будут зарабатывать на этом. Кому нравится быть стариком с плохим сердем? Ребята в белых халатах помогут! Что ж, это их дело. Надо попробовать узнать у участников, чего они смогли добиться. Возможно, получится что-то сделать и с моими пороками сердца.

Второй проект направлен на создание и управление космическими аппаратами. Многомиллионные технологии, чего уж говорить! Помимо того, что они строят ракеты с использованием Git, так еще и запуски производят с использованием системы контроля версий. Неудачный запуск теперь всегда можно откатить. Сначала запускают пустую ракету, без космонавтов. Если все проходит удачно, то откатывают все назад, космонавтов сажают в ракету и отправляют на орбиту.

Были и другие интересные проекты, но они меня устраивали уже куда меньше: «Удачные роды», «Сохранение невинности» (Чёрт, теперь же нельзя быть даже в этом уверенным!).

Глава 5 7aa25ff4cd0c96fea92f42b2d6c70939.jpgВ моей голове была каша. Вчера явно стоило пить меньше.Уже по привычке я оделся и позавтракал одной командой. Git стал повседневной необходимостью, а меня превратил в заложника технологии. А пусть! Мир не останавливается и всегда движется вперед, а не назад. Лучше использовать новые технологии, чем бояться их.

Представилась сразу картина: подходят в 1945 году советские войска к Берлину. И тут один из генералов говорит: «Стоооооооой! Прекратить наступление! Если сейчас выиграем, то в будущем повсеместно будут использоваться компьютеры и наши внуки будут за ними сидеть! Идем назад, нам не нужно такое будущее!»

Хорошо, что никто не слышал мой хохот. Трудно было бы объяснять.

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

Его больница располагалась в красивом и высоком здании на окраине города. Когда я вошел в кабинет, было видно, что Кирилл хотел было уже разозлиться на непрошенного пациента, но узнав меня, он сразу просиял.

— Здравствуй! Давно не виделись, Кирилл.— Приветствую, дорогой мой. Как твое здоровье? — Да вот как раз насчет него и пришел. Сердечко что-то шалит, ты не мог бы посмотреть? — Конечно! Раздевайся до пояса и ложись на кушетку. Нам как раз привезли новое оборудование и хотелось бы его проверить в деле. Совершенно уникальные технологии в области исследований сердца!

Я разделся, оперся на «уникальные технологии», чтобы лечь, и ноги подкосились. Еле успел развернуть тело в сторону кушетки.

— Вставай! Вставай, говорю! Черт, ну и угораздило же тебя. У тебя серьезная сердечная недостаточность. Я вижу, что кто-то уже успел поколдовать на твоим сердцем. Посмотри, тут у тебя сплошные сбои в сердце, но произошло это не так давно. Как ты вообще такое провернул! — Извини, я не могу тебе все рассказать. Секретные современные разработки— Ладно, это не мое дело. Слушай, я не знаю кто и что делал с твоим сердцем, но тебе точно нужно попросить исправить эти ошибки. Тут какая-то очень сложная логика работы, у меня на это уйдет много времени. В общем, когда твое сердце разгоняется, то порой клапаны не дают прокачивать кровь. Раз уж ты смог использовать эти технологии, то лучше бы тебе обратиться к разработчикам за помощью и исправить.— Спасибо, ты мне очень помог.— Выздоравливай.

Как неудобно получилось! Кирилл явно не хотел, чтобы его впутывали в какие-то интриги. Я это прекрасно понимаю. Что ж, зато он мне дал информацию о том, как и что исправлять. Будем просматривать патчи и искать проблему. Так, он ведь сказал, про то, что эта ошибка проявляется при разгоне сердца. Значит буду вести себя очень спокойно, стараться минимизировать усилия. Я решил взглянуть на коммиты в патчах и ужаснулся: столько много коммитов! И они такие объемные! Черт, мне за всю жизнь тут не управиться.

Нужно идти на работу. Может взять отгул хотя бы на сегодня? Не, подведу ребят, и так еле-еле успеваем. И тут мне пришла идея спросить у своих коллег по работе. Все же они знали Git намного лучше меня.— Ребят, а как вы находите баги в какой-нибудь функции, которая раньше работала, а потом перестала? — По-разному, — ответил Алексей. — Обычно достаточно checkout на 1–2 своих коммита. Если это не помогает, то вероятнее всего ошибка возникла из-за кого-то. Тогда нужно пользоваться git bisect— Хорошо, сейчас попробую.

Пишу в консоли❋ git bisect start❋ git bisect bad

Так, надо попробовать последнюю стабильную версию.

❋ git checkout v2.1

Нужно разогнать сердце. Хм, как раз есть время немного пробежаться. Выхожу на улицу, а там просто замечательная погода. Сердце радостно отозвалось. Нет, это просто я доволен. Начинаю забег, люди таращатся на меня, как на безумного. Интересно, это вообще когда-нибудь прекратится? У них своих проблем не хватает? Через некоторое время я уже перестал замечать кого-то вокруг. Бег доставлял удовольствие. Так вот чего мне не удалось получать так долго. Чертова природа, почему мы не можем рождаться сразу здоровыми? Хотя да, люди не ценят того, что достается бесплатно. Все верно. Похоже, что в этой версии прошивки сердца ошибок нет, я чувствую себя абсолютно хорошо. Надо указать это Git’у

❋ git bisect goodBisecting: 6 revisions left to test after this[f71ce38690acf49c1f3c9bea38e09d82a5ce6014] fix heartrate

В этот день я попробовал сменить прошивку сердца еще два раза, но ошибка так и не проявилась. Круг подозреваемых коммитов сократился до одного коммита, нужно будет обязательно изучить его после работы! Замечательная штука этот Git!

© Habrahabr.ru