Использование Git и GitHub

Отступление 3.5

На данный момент переведено

В этой главе вы:

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

    Эта глава подразумевает, что вы малознакомы или совсем не знакомы с Git и GitHub. Если вы уже общаетесь с ними на “ты”, можете смело пропустить эту главу.

    Коммиты

    Базовым кирпичиком git репозитория является коммит (commit). Его можно представить как фотоснимок всего вашего кода в отдельный момент времени. Код со временем меняется, но если вы делаете коммиты, то к любому из них можно вернуться, отмотав время назад с помощью волшебства git.

    Вместо того чтобы просто выдать вам законченный код от Microscope, мы делали снимки кода на каждом шаге написания этой книги. Все снимки доступны онлайн на GitHub.

    Например, вот так выглядит последний коммит предыдущей главы:

    A Git commit as shown on GitHub.
    A Git commit as shown on GitHub.

    Вы видите “diff” (от слова “difference” - “разница”) файла post_item.js, или иными словами изменения, которые произошли с этим файлом в результате последнего коммита. В нашем случае мы создали файл post_item.js с чистого листа, поэтому всё его содержимое подсвечено зелёным.

    Давайте посмотрим на другой пример из будущей главы:

    Modifying code.
    Modifying code.

    В этот раз зелёным подсвечены только те строчки кода, которые были изменены.

    Иногда строчки кода не только добавляются или изменяются, но и удаляются:

    Deleting code.
    Deleting code.

    Мы только что познакомились с одной из фишек GitHub - легко просматривать код и находить в нем изменения.

    Обзор кода в коммите

    По умолчанию git коммит показывает только изменения в коде, но иногда вам может захотеться посмотреть на файлы, которые не изменились. Просто чтобы удостовериться что их содержимое именно такое, каким вы ожидаете его увидеть.

    GitHub поможет нам и в этом. Когда вы находитесь на странице коммита, нажмите Browse code:

    The Browse code button.
    The Browse code button.

    Теперь у вас есть доступ к репозиторию в том виде, в котором он был на момент этого коммита:

    The repository at commit 3-2.
    The repository at commit 3-2.

    На первый взгляд может оказаться не совсем ясно что мы смотрим на коммит. Но если мы сравним репозиторий с главной мастер веткой то сразу же будет видно что файлы выглядят по-другому:

    The repository at commit 14-2.
    The repository at commit 14-2.

    Локальный просмотр коммита

    Мы только что узнали как посмотреть весь код коммита на GitHub'e. Но что делать, если вам нужно посмотреть код одного из коммитов локально? Например, вам нужно откатить приложение во времени до определенного коммита, запустить его локально и посмотреть как оно себя поведет.

    Для этого мы совершим наши первые шаги (по-крайней мере в этой книге) с командной утилитой git. Для начала удостоверьтесь что Git установлен на вашей машине. Затем клонируйте (то есть, загрузите локальную копию) репозитория Microscope следующей командой:

    $ git clone git@github.com:DiscoverMeteor/Microscope.git github_microscope
    

    Обратите внимание на github_microscope в конце команды - это название локальной папки, куда репозиторий будет клонирован. Если у вас уже есть папка microscope, просто выберите любое другое имя (оно не должно совпадать с именем Github репозитория).

    Перейдем в созданную папку с помощью команды cd. Отсюда мы сможем начать использование утилиты git:

    $ cd github_microscope
    

    Теперь когда мы клонировали репозиторий, мы загрузили весь код приложения. Это означает что у нас код финального приложения в момент самого последнего коммита.

    К счастью, мы можем откатиться во времени на момент определенного коммита, не влияя при этом на все другие коммиты. Давайте попробуем:

    $ git checkout chapter3-1
    Note: checking out 'chapter3-1'.
    
    You are in 'detached HEAD' state. You can look around, make experimental
    changes and commit them, and you can discard any commits you make in this
    state without impacting any branches by performing another checkout.
    
    If you want to create a new branch to retain commits you create, you may
    do so (now or later) by using -b with the checkout command again. Example:
    
      git checkout -b new_branch_name
    
    HEAD is now at a004b56... Added basic posts list template and static data.
    

    Git сообщает, что мы в режиме под названием “detached HEAD”. Это означает что с точки зрения Git мы можем смотреть на прошлые коммиты, но мы не можем их изменять. Это можно сравнить с волшебником, смотрящим на прошлое сквозь хрустальный шар.

    (Стоит обратить внимание что у Git есть команды, которые позволяют изменять прошлые коммиты. Это будет примерно как если путешественник во времени отправляется в прошлое и наступает на бабочку. Мы оставим это команды за рамками этой главы.)

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

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

    Finding a commit hash.
    Finding a commit hash.

    Давайте попробуем команду git checkout с хешем вместо тега:

    $ git checkout c7af59e425cd4e17c20cf99e51c8cd78f82c9932
    Previous HEAD position was a004b56... Added basic posts list template and static data.
    HEAD is now at c7af59e... Augmented the postsList route to take a limit
    

    Наконец, что если нам нужно прекратить смотреть в хрустальный шар и вернуться к реальности? Для этого нужно сообщить Git, что мы желаем открыть ветку master:

    $ git checkout master
    

    Заметьте, что вы также можете запустить свое приложение командой meteor на любой стадии процесса, даже когда вы находитесь в состоянии “detached HEAD”. Вам может понадобиться сначала запустить быструю команду meteor update если Meteor ругается на недостающие пакеты, так как код пакетов не включен в Git репозиторий Microscope.

    Взгляд в историю

    Вот еще один случай: вы просматриваете файл и замечаете код, который раньше никогда не видели. Дело в том, что вы не можете вспомнить когда этот код был добавлен. Вы могли бы просматривать коммиты один за одним, пока не нашелся бы верный. Но есть способ проще. Встречайте кнопку History на GitHub'e.

    Для начала откройте один из файлов в репозитории на GitHub. Затем найдите кнопку “History”:

    GitHub's History button.
    GitHub’s History button.

    Теперь вам доступен лист всех коммитов, которые затрагивали этот файл:

    Displaying a file's history.
    Displaying a file’s history.

    Кто виноват?

    Напоследок давайте обратим внимание на кнопку “Blame”:

    GitHub's Blame button.
    GitHub’s Blame button.

    Эта страница показывает нам, кто изменил каждую линию файла, а также коммит, частью которого это изменение является. Другими словами - кого винить в том, что код больше не работает.

    GitHub's Blame view.
    GitHub’s Blame view.

    Git довольно сложный инструмент - равно как и GitHub - и мы даже не пытаемся охватить все в рамках этой главы. На самом деле мы едва затронули все то, что возможно достичь с помощью этих двух инструментов. Но мы надеемся, что даже то немногое что мы успели рассмотреть, поможет вам при дальнейшем чтении этой книги.