Blog logotype

Learn Git. Git Teamwork. Codecademy на русском

1. Overview

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

Представим, что вы учитель, разрабатываете тесты с Салли, другим учителем в школе. Вы используете Git для совместным управлением проектом.

Для того, чтобы сотрудничать вам с Салли нужно:

  • Полная копия проекта на собственных компьютерах
  • Способ отслеживания и проверки работы друг у друга
  • Доступ к окончательной версии проекта

Всё это вы можете сделать используя удалённые репозитории. Удалённый репозиторий - это общий Git-репозиторий, который позволяет нескольким сотрудникам работать в одном проекте Git из разных мест. Сотрудники работают над проектом по отдельности, а потом объединяют все изменения вместе, когда они будут готовы это сделать.

2. Git Clone

Салли создала удалённый репозиторий, science-quizzes в каталоге curriculum (учебная программа), к которой преподаватели имеют доступ через общую сеть школы. Для того, чтобы получить свою собственную копию science-quizzes, вам необходимо клонировать репозиторий при помощи команды git clone remote_location clone_name. В этой команде:

  • remote_location - сообщает Git где находиться удалённый репозиторий. Это может быть веб-адрес или путь к файлу, например: /Users/teachers/Documents/some-remote
  • clone_name - это имя каталога в который Git будет клонировать репозиторий.

Инструкции:

  1. Удалённый Git-репозиторий называется science-quizzes
    Введите команду для клонирования данного репозитория. Назовите папку для клонирования my-quizzes
    Обратите внимание на выводы в терминале: cloning into 'my-quizzes'...
    Git сообщает нам, что он копирует всё из science-quizzes в каталог my-quizzes.
    my-quizzes - это ваша локальная копия Git-проекта science-quizzes. Если вы будете коммитить все изменения только здесь, то Салли не будет знать о них.

3. Git remote -v

Хорошая работа! Теперь на нашем компьютере есть клон удалённого репозитория Салли. Есть ещё одна вещь, которая делается за кулисами: когда вы клонируете репозиторий, Git автоматически добавляет этот удалённый репозиторий под именем origin, дабы упростить обращение к удалённому репозиторию. В данном случае удалённый репозиторий Салли это origin.

Вы можете посмотреть список удалённых Git-проектов с помощью команды git remote -v

Инструкции:

  1. Используя навигатор изучите содержимое клонированного Git-проекта. Там есть несколько викторин файлов, с которыми мы будем работать в течение этого урока.
    Откройте любой файл на ваш выбор в текстовом редакторе.
  2. В командной строке переместитесь в каталог my-quizzes, введя команду: cd my-quizzes
    Чтобы узнать побольше о команде cd, то переходите по ссылке.
  3. Введите команду git remote -v, чтобы посмотреть доступные удалённые репозитории.
    Обратите внимание на результаты в терминале:
    origin    /home/ccuser/workspace/curriculum/science-quizzes (fetch)
    origin    /home/ccuser/workspace/curriculum/science-quizzes (push)
    • Git выводит имя удалённого репозитория, origin, и его местоположение.
    • Git автоматически называет удалённый репозиторий именем origin, чтобы можно было бы ссылаться на данный удалённый репозиторий. Также можно безопасно изменить это имя.
    • Удалённый репозиторий был перечислен дважды: один раз для (fetch) и один раз для (push). О них мы узнаем чуть позже.

4. Git fetch

После того, как вы клонировали science-quizzes, вы убежали проводить урок. Теперь, вернувшись к компьютеру, вы обнаружили проблему: пока вы преподавали, Салли проделала изменения в Git-проекте science-quizzes. В таком случае ваша копия репозитория не обновлена до последней версии.

Самый простой способ узнать, внесены ли какие-либо изменения в удалённый репозиторий и забрать эти изменения с помощью команды git fetch

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

Инструкции:

  1. Введите следующую команду: cd my-quizzesчтобы перейти в каталог my-quizzes.
  2. Получите (fetch) все новые изменения от Салли, которые возможно она сделала в удалённом репозитории.

5. Git merge

Даже если новые коммиты Салли были извлечены (fetched) в вашу локальную копию Git-проекта, то эти коммиты всё равно находятся на ветке origin/master. Ваша локальная ветка master всё ещё не была оббновлена, так что вы не сможете просматривать или вносить изменения в работу, которую она добавила.

В Уроке III, Git Branching мы изучали слияние веток. Сейчас мы используем команду git merge, чтобы объединить ветку origin/master в вашу локальную ветку master. Команда git merge origin/master выполнит эту задачу.

Инструкции:

  1. Введите следующую команду: cd my-quizzesчтобы перейти в каталог my-quizzes.
  2. Вы находитесь в локальной ветке master. В вашей истории коммитов, сообщение HEAD-коммита следующее: Add first question to Physics quiz
    Через терминал слейте с веткой origin/master, в которой находятся самые последние коммиты.
    Обратите внимание на вывод терминала:
    Updating a2ba090..bc87a1a
    Fast-forward
    biology.txt | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)
    • Git выполнил "быструю перемотку" (fast-forward) слияния, в результате чего ваша локальная ветка master обновиться до последних коммитов Салли.
  3. Посмотрите историю коммитов.
    В выходных данных обратите внимание, что HEAD-коммит изменился. Теперь сообщение следующее: Add heading and comment to biology quiz

6. Git workflow

Теперь, когда вы объединили origin/master в локальную ветку master, вы самостоятельно готовы внести свой вклад в работу. Рабочий процесс для Git-сотрудников обычно следует этому порядку:

  1. Получение (fetch) и слияние (merge) изменений из удалённного репозитория
  2. Создание рабочей ветки для новой функции (фичи) проекта
  3. Разработка функции на вашей ветке и комммит своей работы
  4. Получение (fetch) и слияние (merge) изменений из удалённного репозитория снова (в случая, если были сделаны новые коммиты пока вы работали)
  5. Отправление (push) ветки в удалённую ветку для рассмотрения.

1 и 4 шаги являются гарантией против конфликта слияния веток, когда две ветви содержат изменения файлов, которые не могут объединиться командой git merge. 5 шаг включает в себя команду git push, о которой вы узнаете в следующем упражнении.

Инструкции:

  1. Введите следующую команду: cd my-quizzesчтобы перейти в каталог my-quizzes.
  2. Введите Git-команду: git branch branch_name, чтобы создать ветку для разработки вопросов по биологии. Назовите ветву так: bio-questions.
    Примечание: будьте осторожны, напишите именно такое название, без ошибок.
  3. Переключитесь на новую ветку с помощью команды git checkout branch_name, где branch_name - это имя нового ветки.
  4. На вашей ветке, откройте в редакторе кода файл biology.txt.Добавьте вопросы по биологии в файл с вариантами ответов. Например:
    What is an animal that hunts and eats other animals called?
    a) herbivore
    b) prey 
    c) ecosystem 
    d) predatorЦ
  5. Проиндексируйте файл biology.txt.
  6. Сделайте коммит с соответствующим коммит-сообщением.

7. Git push

Теперь пришло время, чтобы поделиться нашей работой с Салли.
Команда git push origin your_branch_name отправит всю работу в удалённый репозиторий, origin. Оттуда, Салли может рассмотреть вашу ветку и объединить вашу работу в свою ветку master, сделав его частью окончательной версии проекта.

Инструкции:

  1. Введите следующую команду: cd my-quizzesчтобы перейти в каталог my-quizzes.
  2. Отправьте свою ветку в удалённый репозиторий. В выходных данных, обратите внимание на строку:
    To /home/ccuser/workspace/curriculum/science-quizzes
     * [new branch]      bio-questions -> bio-questions

    Git сообщает нам, что ветка bio-questions была отправлена в удалённый репозиторий. Теперь Салли может рассмотреть вашу новую работу и объединить его в удалённую ветку master.

Итоги

Поздравляем, теперь вы знаете достаточно, чтобы начать совместную работу Git-проектов! Давайте повторим всё.

  • Удалённый репозиторий представляет собой хранилище Git, которое находиться за пределами вашей папки Git-проекта. Удалённые репозитории могут находиться в Интернете, в общей сети или даже в отдельной папке на локальном компьютере.
  • Git Совместная Работа - шаги, которые дают возможность плавному развитию проекта, когда несколько сотрудников работают над одним Git-проектом.

Также мы узнали следующие команды:

  • git clone - создает локальную копию удалённого репозитория.
  • git remote -v: выводит список удалённых репозиториев.
  • git fetch: получает изменения из удалённого репозитория в локальную копию.
  • git merge origin/master: объединяет ветку origin/master в локальную ветку.
  • git push origin branch_name: отправляет локальную ветку в origin-репозиторий.

Git проекты, как правило, находяться на Github, веб-сайте, на котором размещены Git-проекты миллионов пользователей. С Github вы можете получить доступ к проектам из любой точки мира, используя основы рабочего процесса, которые вы здесь узнали.