- использовать ветвление в гите
- совместно работать с использованием git и github
- решать простые конфликты
Pro git: о ветвлении в двух словах
Pro git: основы ветвления и слияния
Pro git: работа с удалёнными репозиториями
Pro git: внесение собственного вклада в проекты
-
зачем нужно ветвление в git?
-
что значит "удалённый" репозиторий? Где он может находиться?
-
как получить изменения из удалённого репозитория?
-
в каком случае может возникнуть конфликт?
-
что такое форк?
-
что такое пулл-реквест, зачем они нужны?
В терминале перейдите в директорию, в которой находится ваш репозиторий (например, cd ~/apps/ruby-newbie)
Посмотрим информацию об удалённом репозитории с помощью команды git remote.
# Просмотреть адреса для чтения и записи, привязанные к репозиторию:
git remote -v# Больше информации об удалённом репозитории
# origin - имя репозитория, мы настраивали его с помощью команды git remote add на прошлом уроке
git remote show originПодробнее о выводе git remote show origin
# список веток
git branch
# список всех веток - локальных и удалённых
git branch -aНапример, мы хотим поработать над новой "фичей" - добавим файл с описанием проекта (README.md)
Создадим новую ветку и переключимся на неё:
git checkout -b readme
# то же самое
git branch readme
git checkout readmeСоздайте файл README.md в редакторе или командой touch.
Запишите туда текст с описанием вашего репозитория, например:
# Ruby-newbie
Заметки и код для курса по RubyЕсли файл уже существует, внесите в текст какие-нибудь изменения.
# добавим файл в индекс
git add README.md
# закоммитим
git commit -am "Added readme"
# отправим в удалённый репозиторий
# с названием нашей ветки
git push origin readmeПроверим, как выглядят ветки на гитхабе.
- видим, что гитхаб предлагает сделать пулл-реквест (пока не будем его делать)
Проверим список веток в консоли:
# список всех веток, включая remote-ветки
git branch -aМы закончили работу над "фичей" и хотим влить свои изменения в основную ветку (main).
Пока не будем делать пулл-реквест, а просто смёржим в main (внесём изменения из ветки фичи (readme) в основную (main)). Для этого перейдём в ветку main:
git checkout main
# мёржим
git merge readme
# пушнем на гитхаб
git push origin mainТеперь мы должны увидеть своё описание на гитхабе на странице проекта.
Попробуем "создать" простой конфликт и решить его:
Внесём изменения в файл README.md, поменяем заголовок и текст, находясь в ветке main:
Пример нового текста README.md:
# Ruby: code and notes
My notes and code for the course.(при совместной работе над проектом обычно мы не вносим изменения в ветку main напрямую, но сейчас сделаем, для упрощения процесса)
Коммитим:
# можно заменить описание коммита
git commit -am "Changed readme"Теперь внесём изменения в тот же файл в новой ветке. Создайте ветку, например, update-readme, переключитесь на неё и внесите изменения в тот же файл.
Чтобы возник конфликт, лучше внести изменения и в заголовок, и в описание. Git будет стараться слить файлы самостоятельно, чтобы избежать конфликтов, но наша цель сейчас - посмотреть на конфликт и разрешить его вручную (такое тоже часто приходится делать в процессе работы).
Пример изменений:
# My attempt to learn ruby: my code
- Code for the course.
- Ideas
- NotesКоммитим:
# git commit -a заметит изменения и автоматически выполнит git add перед коммитом
# такая команда внесёт в индекс изменения в существующих файлах,
# но не добавит в индекс новые файлы, если они были созданы (их нужно отдельно добавить командой git add перед коммитом)
git commit -am "ваше описание"Попробуем слить(смёржить) ветки:
git checkout main
git merge название-вашей-веткиПроверим, возник ли конфликт. Если он возник, в консоли вы увидите подобное сообщение:
anna@composaurus:~/apps/hello$ git merge readme2
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.Посмотрите статус (git status), о также сообщит вам, что при мёрже произошёл конфликт.
...
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
...Откройте файл в vscode:
Символы <<<<<<< HEAD (и подобные) - это просто текст, но, вероятно, редактор вам его подсветит и подпишет дополнительно, для удобства.
Решите конфликт в редакторе (выберите нужную версию и сотрите лишние символы). Не забудьте удалить "разметку" конфликта, символы <<<<<<< и подобные, в файле должно остаться только то, что вы хотите в нём видеть.
Затем сообщим о решении gitу:
# добавим файл в индекс
git add README.md
git commit -m "Fixed conflict"
# запушим для порядка
git push origin main- конфликты при совместной работе
- с использованием удалённого репозитория
Получить изменения из remote-репозитория:
git pullВ этом блоке будем работать над заготовкой для лендинга курса. В репозитории находится простая html-страница, стилизованная с помощью фреймворка Milligram.
Клонируем репозиторий ruby-newbie.github.io
git clone git@github.com:ruby-newbie/ruby-newbie.github.io.git
# перейдём в директорию
cd ruby-newbie.github.io/
# проверим, что origin указывает на remote-репозиторий
git remote show originВыберите одну из задач:
- напишите краткое описание курса
- добавьте ссылку на репозиторий (тег
<a>) - добавьте ссылку на организацию на гитхабе (тег
<a>) - заполните таблицу "расписание"
- другое изменение по вашему желанию (исправить опечатку, исправить/добавить стили, иллюстрацию и т.п.)
Если выбрали задачу из списка, зайдите на гитхаб в список задач, перейдите в задачу и "возьмите" её (assign yourself).
Если хотите внести своё изменение, можете создать задачу и так же "взять" её.
Как выполнить задачу:
- создайте ветку, дайте ей осмысленное название; переключитесь на свою ветку
- внесите изменения в файл
index.html - перед коммитом проверьте, что вы находитесь в нужной ветке (
git status) - закоммитьте
- запушьте в свою ветку в remote-репозиторий (
git push origin название_ветки) - сделайте пулл-реквест на гитхабе
Возможно, понадобится "подтянуть" изменения из репозитория.
[Это будет полезно, если между вашим git clone или git pull и выполнением задания были внесены изменения в ветку main]
git fetch # подтянуть изменения
git pull # fetch + mergeПока подтянем так:
# переключимся в main
git checkout main
# подтянем изменения в main
git pull main
# переключимся на ветку
git checkout веткаname
# мёржим
git merge mainПри необходимости решите конфликты и запушьте свою ветку в удалённый репозиторий.
Если у вас нет прав на создание веток в чужом репозитории, вы можете сделать пулл-реквест из форка.
Сделайте форк репозитория, нажав кнопку "Fork". Например, создать форк репозитория с инструкциями: Fork
Вы сможете работать с созданным репозиторием аналогично тому, как работаете, со своим собственным. Для внесения изменений лучше так же создать отдельную ветку (хотя существует и возможность сделать пулл-реквест из ветки main форка).
После внесения изменений и пуша в форк, создайте пулл-реквест:
Вкладка pull-requests проекта => New Pull Request
Здесь base - куда вы хотите залить изменения (base:main) - уже будет выбрано. compare - откуда делаем изменения, выберите ветку в своём форке. Напишите описание ваших изменений и создайте pull request.
Создайте пулл-реквест с изменениями инструкций для курса.
Репозиторий
Например, вы можете исправить опечатку или более удачно сформулировать инструкции / добавить объяснение или решение для потенциальных проблем, добавить дополнительные материалы в соответствующий раздел.


