Проверочная работа#
Контрольные вопросы#
Что такое Git-сервер? Какие задачи он выполняет?
Как происходит взаимодействие между Git-сервером и Git-клиентом?
Кто предоставляет услуги Git-сервера? Какие еще услуги они предоставляют дополнительно?
Чем является GitHub?
Чем является GitLab?
Чем отличается публичный проект (хранилище) от приватного?
В чем отличие между GitHub и GitLab?
Какие публичные проекты открытого ПО вам известны?
Какие варианты вы имеете для размещения ваших проектов?
Какой командой копируется удаленное хранилище из Git-сервера?
Склонируйте хранилище по адресу
https://github.com/pmodels/mpich.git.Каким способом можно выбрать место в файловой системе для локального хранилища?
Как можно извлечь адрес хранилища у проекта на GitHub?
Как можно ускорить загрузку хранилища по сети?
Чем отличаются публичное хранилище от приватного с точки зрения доступа к ним?
Какие элементы можно выделить из адреса удаленного хранилища?
Какие протоколы доступа к удаленному хранилищу Git вы знаете? Какими из них вы уже пользовались?
Какую возможность дает привязка хранилища к имени пользователя?
Что такое ветка?
Когда появляется необходимость в ветках?
Какие бывают ветки? Для чего они предназначены?
Что означает “текущая ветка”?
Как узнать, которая из веток текущая?
Как лучше всего отобразить дерево коммитов в графовом представлении?
Как посмотреть список веток с последними коммитами для каждой?
Как создать новую ветку?
Как переключиться на другую ветку?
Как одной командой создать новую ветку и переключиться на нее?
Когда возникает необходимость в объединении изменений?
Какие проблемы могут возникнуть при неудачном объединении изменений?
Какие способы объединения изменений вам известны?
Что делает команда
git merge?Расскажите про перенос изменений коммитом слияния.
Расскажите про перемотку вперед.
Расскажите про перебазирование.
Когда следует отказаться от перемотки вперед и перебазирования?
Что такое конфликт слияния? В каких случаях возникает конфликт?
Как разрешается конфликт слияния?
Для чего используют KDiff3?
В чем состоит обслуживание веток?
В чем состоит синхронизация хранилищ?
Какие команды используют для синхронизации хранилища?
Чем команда
git fetchотличается отgit pull?Для чего существует псевдоним удаленного хранилища?
Чем отличается локальная ветка от удаленной?
Что значит “отслеживающая ветка”?
Расскажите про централизованную модель взаимодействия участников проекта.
Расскажите про модель с интеграционным менеджером для взаимодействия участников проекта.
Расскажите про модель с диктатором и помощниками для взаимодействия участников проекта.
Упражнения#
Создайте удаленное хранилище и склонируйте его в два локальных.
Повторите структуру дерева коммитов, показанных на рисунке ниже.
Создайте хранилище с ветками
mainиtrain, в каждом из которых по одному коммиту. Перенесите изменения из веткиmainвtrain, создайте дополнительный коммит вtrain, а затем перенесите все изменения обратно вmain.Создайте хранилище со структурой из рисунка ниже. Перебазируйте тематическую ветку в основную. Проверьте, какие поля изменились у коммитов.
Создайте удаленное и два локальных хранилища. Внесите отдельные изменения в локальные хранилища. Заберите изменения из одного локального хранилища в другое в отдельную ветку и удалите ненужное хранилище.
Перенесите коммит из одного хранилища в другое через патч.
Замечания по упражнениям#
Для выполнения некоторых упражнений необходимо в командной строке выполнить большое количество команд.
Исполнение команд можно автоматизировать, если набранные команды оформить в виде сценария.
При этом возникает сложность при редактировании файлов, которое происходит интерактивно.
Но и этот процесс можно автоматизировать, если воспользоваться утилитами cat, echo, sed и перенаправлением потоков.
Конструкция ниже формирует файл main.c с главной функцией main из четырех строчек кода.
Маркер EOF (может быть произвольным текстом) показывает конец ввода строк.
cat > main.c << EOF
main()
{
return 0;
}
EOF
Та же самая конструкция, но с перенаправлением в файл main.c через >> уже добавляет в конец файла последующие строки.
cat >> main.c << EOF
void func()
{
}
EOF
Чтобы отредактировать конкретную строку, воспользуйтесь утилитой sed.
Команда ниже отредактирует (опция -i) файл main.c: заменит в первой строке подстроку main() на int main().
sed -i '1s/main()/int main()/' main.c
Note
За примерами обращайтесь в файлы каталога examples/ данного проекта.