Предыдущий ролик Следующий ролик  

Видео урок: Как включить других сотрудников в проект

Git: обучение основам

В этом ролике мы рассмотрим рабочий процесс, где будет показано, как использовать Git, чтобы совместно работать с другими людьми. Я считаю, что такой приближенный к реальности пример поможет вам понять общую картину, и вся та информация, что мы изучили, станет для вас одним целым. На самом деле, мы не будем вносить изменения, которые отнимут у вас много времени и помешают вам понять рабочий процесс. В этом примере я буду сотрудничать с Линдой, и мы будем работать над новой функциональной возможностью для сайта Explore California; этой функциональной возможностью является форма обратной связи, так чтобы пользователи Explore California могли оставлять свои комментарии и примечания.

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

Мы должны выяснить, какие новые коммиты были сделаны и отправлены в репозиторий за последнее время. Итак, я пишу git fetch, и оказывается, что кто-то из моих коллег внес изменения. Его коммиты не связаны с тем функционалом, который я хочу добавить, но я все же хочу убедиться, что эти изменения у меня есть. Далее, я хочу внести изменения, находящиеся в origin/master, в мой бранч master. На данный момент мой основной бранч полностью синхронизирован с тем, что находится в удаленном репозитории, и я готов начать работать.

Я хочу разрабатывать новый функционал в отдельном бранче, и поэтому моя работа не навредит тому, что находится в основном бранче. А если затем по какой-то причине вы не захотите продолжить разработку функционала, бранч можно легко удалить. То есть, теперь я создаю этот бранч, используя checkout -b , новый бранч будет создан, и Git переключится на него. И хотя сейчас содержание моей рабочей директории такое же, как в основном бранче, я переключаюсь на новый бранч feedback_form.

Итак, я открываю рабочую директорию и вношу туда желаемое изменение, в данном случае я добавляю файл feedback.html, захожу в него и редактирую форму, чтобы она выглядела так, как я хочу. Когда все закончено, я могу сделать коммит. Добавляю эти изменения в буфер и коммичу их. На данный момент изменения находятся в локальном репозитории внутри бранча feedback_form. Пока еще мы готовы сделать слияние с основным бранчем, я хочу, чтобы Линда тоже посмотрела на эти изменения. Так что нам нужно отправить их в удаленное хранилище, чтобы она могла их увидеть.

Но прежде чем я их туда отправлю, я сначала напишу git fetch, чтобы увидеть, есть ли в репозитории изменения, которые мне нужно принять во внимание. Если таковые есть, тогда я посмотрю на них и решу, нужно ли мне переносить их в бранч feedback или нет. В данном примере нет никаких других коммитов. И теперь я могу отправить мой бранч в origin, я отправляю весь бранч, а не только коммит. Бранч не существует на удаленном сервере, пока я его не отправлю. Пишу git push origin feedback_form, а затем я использую опцию -u.

Вы же помните, что эта опция делает так, чтобы бранч отслеживался, и в дальнейшем feedback_form будет отслеживаться, мне нужно будет тогда меньше писать, потому что Git сам будет знать, куда отправлять изменения. Когда все это сделано, моя работа попадает в удаленный репозиторий, и мои коллеги могут ее видеть. Я пишу имейл Линде и говорю в нем: "Привет, Линда. Помнишь, мы вчера вечером обсуждали, как добавить форму обратной связи? Я кое-что набросал и отправил это на удаленный сервер. Посмотри, пожалуйста, и скажи, что ты думаешь по этому поводу". А теперь давайте переключимся и посмотрим на вещи глазами Линды.

У Линды тоже есть репозиторий, она работает с ним уже несколько недель. Если бы его у нее не было, ей пришлось бы писать git clone, чтобы получить репозиторий, а также Линда должна находиться в основном бранче, если это не так, то нужно переключиться. И самое первое, что должна сделать Линда, это написать git fetch. Это всегда нужно сделать в первую очередь. Пока она не напишет fetch, она даже не увидит бранч, который я отправил на удаленный сервер. Пока что на ее компьютере нет информации о других доступных бранчах.

Она пишет git fetch, затем git branch -r, и Линда увидит новый бранч. Есть изменения, которые другие сотрудники отправили ночью, и, возможно, она захочет перенести их в основной бранч, так чтобы он всегда был полностью обновлен. В этом нет абсолютной необходимости, но это хорошая практика. После того как она все это сделала, она может просмотреть мою работу. Ей нужно сделать чекаут бранча, который я туда отправил. Для чекаута она использует опцию -b. В этот раз она не просто запрашивает feedback_form, что просто выведет ее из бранча, в котором она сейчас находится, ее версии основного бранча, вместо этого она запрашивает feedback_form и его источник, а это origin/feedback_form, то, что я отправил на удаленный сервер.

Также это уже будет отслеживаемый бранч, так что она будет видеть, что я сделал, она использует git log, и она может найти коммит, что я добавил feedback.form.html. Также она может взглянуть на сам коммит, возможно, она будет использовать SHA. Также она может использовать HEAD, если это был последний коммит. Также она может использовать имя бранча, git show feedback_form, и поскольку это последний коммит, его она и увидит. После того как Линда получила мой коммит, открыла браузер и решила просмотреть, что же нового на странице, она решила, что нам стоит добавить в форму опцию выбора, так чтобы пользователь мог выбрать тур и включить его в форму обратной связи, так чтобы мы знали, какой тур они имеют в виду, когда пишут свой отклик.

Итак, она вносит это изменение, коммитит его, и для этого она использует опцию -a, так что за один шаг изменение уходит в буфер и происходит его коммит. Итак, это изменение находится на ее компьютере, ей нужно отправить его на удаленный сервер, чтобы я его видел. Сначала она пишет git fetch, чтобы убедиться, что новых изменений на удаленном сервере нет, их нет, поэтому она пишет git push. На данный момент Линда закончила. Она отправляет мне имейл, в котором говорит, что все отлично, она только внесла маленькое изменение. Я же со своей стороны хочу посмотреть, что это за изменение, поэтому я сразу же пишу fetch, теперь я могу увидеть это изменение.

Но прежде чем сделать слияние, я хочу на него взглянуть, пишу git log. Я собираюсь использовать опцию -p, и нам будут показаны все записи логов, а также суть изменений, которые касаются конкретной записи. Я прошу Git показать мне все, что касается feedback_form, моей копии. Между моей копией и тем, что Линда отправила в репозиторий, есть разница. Я могу увидеть все изменения, которые сделала Линда, и мне нравятся эти изменения.

Теперь я собираюсь отправить их в мой бранч feedback. На данном этапе бранч feedback_form синхронизирован между мной, удаленным репозиторием и Линдой. У всех нас одинаковый контент в нем. В данном случае слияние было быстрым, так что коммитить нечего, но если бы я в это время тоже внес бы какие-то изменения, тогда мне нужно было бы сделать настоящее слияние и отправить результат обратно на удаленный сервер. Но поскольку я не внес никаких изменений, это было быстрое слияние. Теперь я могу сказать, что функционал завершен, и я могу отправить изменения в основной бранч.

итак, я переключаюсь на основной бранч, после этого я пишу git fetch и смотрю, появились ли какие-то изменения, пока я изучал работу Линды. Если такие изменения есть, я забираю их с origin/master. На данный момент основной бранч полностью обновлен. мне действительно нужно убедиться, что основной бранч полностью обновлен, прежде чем сделать следующий шаг. А он заключается в том, чтобы забрать изменения из feedback_form. Я забираю эти изменения и отправляю их в обновленный основной бранч.

Я забрал изменения из feedback_form, но также с легкостью я мог забрать их из origin/feedback_form. Они оба указывают на тот же самый коммит, а после того как я сделал слияние, я предотвратил появление каких-либо конфликтов при слиянии, затем я пишу git push, и теперь моя работа находится на удаленном сервере в основном бранче, где ее могу увидеть все люди, которые работают над проектом, и эта работа развернута на веб сайте Explore California. Я вам показал пример того, как проходит процесс работы с другими людьми в Git.

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