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

    Глава 1



    Все началось с того, что мне подарили 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



    Нужно изучать Git! Срочно! Произошедшая со мной история просто поразила меня. Я открыл браузер, зашёл в крупную электронную библиотеку и набрал несколько книг. Захотелось сразу же прочитать, что за две команды подсказала мне девушка. Так, git commit сохраняет текущее состояние, а git reset --hard HEAD отменяет все текущие изменения и возвращает меня к последнему состоянию.

    «Так, на чем же испробовать...» В голову полезли разного рода мысли. Время было позднее, на работу нужно вставать рано. Немного перекусив и приняв душ, я решил сделать коммит: git commit -am 'Test commit'

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

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

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

    Глава 3



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

    Так, вроде бы теперь нужно переключиться на эту ветку изменений. Я все же решил заглянуть в учебник по Git, т.к. вчера плохо запомнил эту тему. «Точно! Git checkout!» — и набрал git checkout рубашка_понедельник

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

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

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

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

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

    Глава 4



    Раз можно использовать разные репозитории, то наверняка есть репозитории с улучшениями для тела и прочих вещей. А ещё много людей могут объединиться и сделать суперкрутые улучшения! Целая команда хирургов исправляет ошибки в работе органов! Подумать только!

    Или, к примеру, команда строителей пробует инновации в строительстве мостов и зданий, не рискуя практически ничем. Возвели фундамент — сохранили состояние, построили этаж — еще раз сохранили. Что-то пошло не так — откатились назад и перепостроили заново участок. Удивительной красоты здания и никакой опасности, что здание не развалится по ходу строительства.

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

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

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

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

    Глава 5



    В моей голове была каша. Вчера явно стоило пить меньше.

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

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

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

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

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

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

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

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

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

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

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

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

    ❋ git checkout v2.1

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

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

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

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 20

      +31
      … А потом я откатился до первой версии и выбрал синюю таблетку.
        +1
        Если бы такая технология была в нашем обществе, то о спокойной жизни можно забыть.
        Никто не обременен выбором и никто не задумывается о последствиях. Все сохряняют текущее состояние и делают что хотят. Хаос. Анархия.
          +48
          Вот по-этому мы никому её и не даём.
            +1
            Ладно анархия, а как все эти конфликтующие бранчи merge'ить в релиз?
            +5
            Я все ждал когда же он окажется в палате после того как его сбил мотоциклист. В конце должно быть возвращение в реальный мир.
            • UFO just landed and posted this here
                +1
                Хм… Несколько не понял… А почему мысли и знания не возвращаются в сохранённое состояние? (Хотя да, так был бы наверное другой сюжет.)
                  0
                  Может им не сделали git add?)
                    +8
                    Скорее их внесли в .gitignore
                    +4
                    Скорее всего они в базе данных)
                    +2
                    Текст красивый, но человек меняется под воздействием внешних обстоятельств, а код нет.
                    Поэтому человеку неплохо было бы иметь возвращение к состоянию, где все хорошо, а коду только при условии его изменения изнутри.
                    Именно поэтому мы и можем двигаться вперед, что можно использовать предыдущие наработки не боясь, что они испортятся сами собой, как человек. Иначе, это была бы совсем другая история IT.
                      +1
                      Ого, автор, респект Вашей фантазии! Красота :)
                      +1
                      Класс!!! Было бы круто превратить это в мини роман :)
                        +1
                        Возможно когда-нибудь разовью тему и напишу что-нибудь еще. Но пока мой фонтан идей иссяк, нужно летом подзаряжаться :)
                        +1
                        > git checkout рубашка_понедельник
                        git checkout -b рубашка_понедельник
                        не было этой ветки в репозитории, и гит не знает что чекаутить
                          +1
                          Пальцы пробежались по клавиатуре и набрали пока еще новую команду git branch рубашка_понедельник"
                            0
                            Да вы правы
                            привычка меня обманула
                          0
                          не понял как это он сделал коммит до удара а откатился в состояние до удара
                            0
                            тоже заметил — не было git add. (сам себя в репо не добавил чувак) но сразу чекаут смог сделать после инита (и после удара мотоциклом).

                            Only users with full accounts can post comments. Log in, please.