Система контроля версий GIT
В этих заданиях Вы будете осваивать основы работы с Git, от создания репозитория и фиксации изменений до ветвления, слияния и совместной работы. Вы также научитесь управлять удаленными репозиториями, откатывать изменения и управлять версиями проекта. Каждое задание представляет собой шаг к освоению полного цикла разработки с использованием Git, что позволит вам эффективно управлять версиями и совместно работать над проектами.
Ниже будет представлено несколько задач на освоение разных аспектов работы git:
- Команды: init, config, status, add, commit
- Команды: branch, checkout, status, log, diff
- Команды: restore, rm, reset, checkout, commit, revert
- Команды: merge, rebase
- Команды: clone, fetch, push, pull, remote
Задача 1.Команды: init, config, status, add, commit
Скачать и разархивировать архив
curl -l -O https://s3.resds.ru/itt/git-task1-1.tar.gz
Получившейся структура каталога:
cloudadmin@git:~$ tree task1-1
task1-1
├── index.html
└── pictures
├── elephant.jpg
├── giraffe.jpg
└── paw_print.jpg
В ходе задания будет необходимо создать на основе директории task1-1
репозиторий Git и внести в него некоторые изменения, после чего зафиксировать их средствами Git. Далее приводим само условие задачи:
Задачи:
-
Создайте репозиторий внутри папки
task1-1
. Убедитесь, что внутри папкиtask1-1
появилась папка .git. -
Настройте пользователя Git на уровне репозитория wild_animals:
- Изучите содержимое файла конфигурации Git для текущего репозитория (.git/config)
- Настройте имя и email пользователя для текущего репозитория
- Убедитесь, что файл .git/config изменился соответствующим образом
-
Изучите содержимое папки .git/objects
- Убедитесь, что отсутствует файл индекса (.git/index)
- Убедитесь, что папка с объектами Git пустая (.git/objects)
- Убедитесь, что указатель HEAD указывает на ветку main
-
Сделайте 1й коммит:
- Сделайте файлы папки wild_animals отслеживаемыми
- Обратите внимание на файл индекса (.git/index) и папку с объектами (.git/objects)
- Сделайте коммит
- Найдите хэш коммита и используйте его в сообщение к следующему коммиту
-
Сделайте 2й коммит
- Исправьте опечатку в файле index.html (опечатка в слове Elephant)
- Добавьте изменения в индекс
- Сделайте коммит
-
Сделайте 3й коммит
- Добавьте в файл index.html секцию для еще одного животного (кенгуру)
- Добавьте изменения в индекс
- Сделайте коммит
-
Перейдите на https://gitlab.resds.ru/ и авторизуйтесь
-
Нажмите на создание нового проекта(репозитория) После этого выберите создание пустого проекта: Назовите проект
task1-1
и отключите созданияreadme.md
, и уровень видимости установите вPublic
После этого необходимо добавить удаленный репозиторийgit remote add origin git@gitlab.resds.ru:tarabanov.if/task1-1.git
где
git@gitlab.resds.ru:tarabanov.if/task1-1.git
, это путь к вашему репозиториюИ пушим изменения в удаленный репозиторий
git push --set-upstream origin --all
Задача 2. Команды: init, config, status, add, commit
Скачать и разархивировать архив
curl -l -O https://s3.resds.ru/itt/git-task1-2.tar.gz
Дана маленькая библиотека, вычисляющая некоторые тригонометрические функции. Она имеет следующую структуру: Структура директории mat_lib;
cloudadmin@git:~$ tree mat_lib
task1-2
├── docs
│ └── math_lib_docs.txt
└── pyfiles
├── factorial.py
├── test.py
└── trigonometry.py
2 directories, 4 files
Назначение каждого из файлов:
-
math_lib_docs.txt
Короткая документация по функционалу библиотеки -
factorial.py
Модуль с функцией factorial(), которая вычисляет факториал переданного числа -
trigonometry.py
Модуль с тригонометрическими функциями, например, sin() -
test.py
Модуль для проверки функционала тригонометрических функций для разных значений углов
Далее можно увидеть содержимое файлов:
Содержимое файла math_lib_docs.txt:
This is the library which designation is to implement some math functions
Содержимое файла factorial.py:
def factorial(x):
ans = 1
if x < 0:
raise ValueError('x must be greater than 0')
for i in range(1, x+1):
ans *= i
return ans
Содержимое файла trigonometry.py:
from factorial import factorial as fct
def sin(x):
sin = 1 - (x**2/fct(2)) + (x**4/fct(4)) - (x**6/fct(6)) + (x**8/fct(8)) - (x**10/fct(10))
return round(sin, 5)
Содержимое файла test.py:
from trigonometry import sin
import math
pi = math.pi
print('pi:', pi)
for alpha in [0, pi, pi/2, pi/3, pi/4, pi/6]:
print(f'For angle: {0 if alpha == 0 else "pi/"+str(int(pi/alpha))}, Sine is ~ {sin(alpha)}')
Задачи:
-
Инициализируйте репозиторий в папке mat_lib
-
Задайте имя пользователя и email глобально
- Проверьте, что изменения внесены в файл глобальных настроек .gitconfig
- Проверьте, что файл локальных настроек .git/config не был изменен
-
Изучите содержимое папки .git/
- Узнайте, на что сейчас указывает HEAD
- Просмотрите файл, на который указывает HEAD
-
Добавьте все файлы в индекс
-
Сделайте первый коммит
- Просмотрите объект коммита, найдите хэш объекта-дерева корня репозитория
- Просмотрите объект дерева корня репозитория
- Проверьте, на что указывает HEAD сейчас
- Просмотрите файл, на который указывает HEAD
- Ответьте на вопрос: на что указывает текущая ветка? Для этого просмотрите на объект, на который указывает ветка.
-
Выполните файл test.py
- Просмотрите статус файлов, чтобы обнаружить, что появились файлы кэша
-
Сделайте второй коммит
- Просмотрите объект коммита, найдите хэш родительского коммита
- Посмотрите, на что сейчас указывает HEAD
- Проверьте файл, на который указывает HEAD
- Узнайте, на что указывает текущая ветка. Для этого просмотрите на объект, на который указывает ветка.
- Создайте и опубликуйте свое репозиторий на https://gitlab.resds.ru/
Задача 3 Команды: branch, checkout, status, log, diff
Дана библиотека, написанная на Python - Geometric Lib. Файловая структура данной библиотеки: Структура папки geometric_lib:
cloudadmin@git:~$ tree geometric_lib
geometric_lib
├── circle.py
├── docs
│ └── README.md
└── square.py
1 directory, 3 files
В качестве задания необходимо выполнить ряд действий над репозиторием geometric_lib: создадим новую ветку, сделаем коммиты, посмотрим историю и изучим внесенные изменения средствами Git.
Задачи
-
Выполните команду
git clone https://gitlab.resds.ru/itt/geometric_lib.git
. -
Создайте новую ветку с названием new_features и переключитесь на нее.
-
Добавьте новый файл в эту ветку.
Например, с вычислениями для фигуры Прямоугольник. Его название: rectangle.py Его содержимое:
def area(a, b): return a * b def perimeter(a, b): return a + b
-
Сделайте коммит с сообщением "L-03: Added rectangle.py".
-
Добавьте еще один файл в эту ветку.
Например, с вычислениями для фигуры Треугольник. Его название: triangle.py Его содержимое:
def area(a, h): return a * h / 2 def perimeter(a, b, c): return a + b + c
-
Исправьте ошибку в вычислении периметра в файле rectangle.py, теперь он должен стать таким:
def area(a, b): return a * b def perimeter(a, b): return 2 * (a + b)
-
Создайте еще один коммит внутри этой же ветки, его сообщение:
"L-03: Added triangle.py and fixed rectangle perimeter bug"
. -
Постройте граф истории всего репозитория с однострочным выводом коммитов.
-
Постройте граф истории только текущей ветки. В ней должно быть два последних коммита.
-
Возьмите хэши двух последних коммитов из истории и посмотрите, какие изменения были внесены.
-
Создайте репозиторий на https://gitlab.resds.ru/
-
Смените удаленный репозиторий на созданный на прошлом шагу
-
Пушните изменения и смерджите созданную ветку, без удаления ветки
Задача 4. Команды: git restore, git rm, git reset, git checkout, git commit, git revert
Дана библиотека, написанная на Python - Geometric Lib. Файловая структура данной библиотеки: Структура репозитория geometric_lib:
# Ветка main (Основная стабильная ветка)
geometric_lib
├── circle.py
├── square.py
└── docs
└── README.md
# Ветка develop (Ветка разработки)
geometric_lib
├── circle.py
├── square.py
└── docs
└── README.md
└── calculate.py
# Ветка feature (Ветка для новых функций)
geometric_lib
├── circle.py
├── square.py
└── docs
└── README.md
└── rectangle.py
В качестве задания необходимо выполнить ряд действий над репозиторием geometric_lib: изучить его структуру, откатить ненужные коммиты, объединить некоторые коммиты в один, перенести файлы из одной ветки в другую и т д.
Задачи
-
Выполните
git clone https://gitlab.resds.ru/itt/geometric_lib.git
Переключитесь на ветки
feature
иdevelop
-
Постройте полный граф истории, чтобы познакомиться со структурой коммитов.
-
Работа с веткой
feature
В последнем коммите ветки feature допущена ошибка. Откатите этот неудачный коммит.
-
Работа с веткой develop
Теперь заметьте, что у нас есть два коммита в ветке develop одной и той же тематики: "L-04: Add calculate.py", "L-04: Update docs for calculate.py".
Объедините их в один коммит и напишите к нему пояснение. -
Эксперименты. Работа с файлами calculate.py и rectangle.py в ветке experiments <BR>Ветку develop мы привели в порядок. Теперь давайте представим, что мы хотим протестировать совместную работу файлов
calculate.py
иrectangle.py
. Чтобы не мешать работе других файлов, создадим отдельную веткуexperiment
, которая будет брать начало в конце веткиmain
. Новая ветка будет хранить коммиты с результатами наших экспериментов. Задания:-
Создайте новую ветку с именем
experiment
.
Как было сказано выше, она пригодится нам, чтобы хранить наши экспериментальные коммиты. -
Мы хотим провести эксперименты с файлом calculate.py, но текущая документация (файл
docs/README.md
) устарела.
Добавьте в нашу рабочую копию документацию, которая содержит информацию о файлеcalculate.py
.
Такая есть, например, в последнем коммите веткиdevelop
.
Для этого скопируйте файлdocs/README.md
из последнего коммита веткиdevelop
в рабочую копию. -
Добавьте в индекс и рабочую копию файл
calculate.py
из последнего коммита веткиdevelop
. -
Добавьте все нужные файлы в индекс и сделайте коммит.
-
-
Создайте репозиторий на https://gitlab.resds.ru/
-
Смените удаленный репозиторий на созданный на прошлом шагу
-
Запушьте изменения
Задача 5.Команды: git merge, git rebase
Дана библиотека, написанная на Python - Geometric Lib. Файловая структура данной библиотеки: Структура репозитория geometric_lib:
# Ветка main (Основная стабильная ветка)
geometric_lib
├── circle.py
├── square.py
└── docs
└── README.md
# Ветка develop (Ветка разработки)
geometric_lib
├── circle.py
├── square.py
└── docs
└── README.md
└── calculate.py
# Ветка release
geometric_lib
├── circle.py
├── square.py
└── docs
└── README.md
└── user_agreement.txt
Задачи
-
Выполните
git clone https://gitlab.resds.ru/itt/geometric_lib.git
Переключитесь на ветки
release
иdevelop
-
Работа с веткой
develop
- Постройте полный граф истории, чтобы познакомиться со структурой коммитов.
- Влейте ветку
develop
в ветку main явным образом (с созданием merge-коммита). - Удалите коммит слияния, чтобы затем выполнить слияние в
fast-forward
режиме. - Влейте ветку
develop
в веткуmain
неявным образом (без создания merge-коммита - в режимеfast-forward
).
-
Работа с веткой release
- Выполните интерактивный ребейз ветки
release
на веткуmain
- объедините все коммиты в один и поменяйте их общее сообщение. Разрешите конфликты. - Выполните
fast-forward
слияние ветки release в веткуmain
.
- Выполните интерактивный ребейз ветки
Задача 6.git clone, git fetch, git push, git pull, git remote
Дана библиотека, написанная на Python - Geometric Lib. В качестве задания необходимо выполнить ряд действий над репозиторием geometric_lib. Файловая структура данной библиотеки: Структура репозитория geometric_lib:
# Ветка main (Основная стабильная ветка)
geometric_lib
├── circle.py
├── square.py
└── docs
└── README.md
# Ветка develop (Ветка разработки)
geometric_lib
├── circle.py
├── square.py
└── docs
└── README.md
└── calculate.py
# Ветка release
geometric_lib
├── circle.py
├── square.py
└── docs
└── README.md
└── user_agreement.txt
Задачи
-
перейдите на страницу https://gitlab.resds.ru/itt/geometric_lib и создайте свой форк
-
Склонируйте к себе свой форк репозитория
geometric_lib
. -
Настройте локального пользователя Git
-
Измените файл
docs/README.md
. Сделайте коммит. -
Выполните пуш ваших изменений в свой удаленный репозиторий.
-
Откройте страницу вашего репозитория. Можете убедиться, что изменения были успешно загружены в удаленный репозиторий, просмотрев историю коммитов на главной странице репозитория.
-
Смените тип получения данных из репозитория с
ssh
наhttps
или наоборот. Смотря от первоначального метода подключения -
Повторно измените
docs/README.md
. Сделайте коммит. -
Выполните пуш ваших изменений в свой удаленный репозиторий.
-
Откройте страницу вашего репозитория и проверьте внесенные изменения
-
Создайте пулл-реквест. В нем подробно опишите внесенные изменения. На странице предпросмотра пулл-реквеста проверьте, что вы не затронули файлы на других ветках и еще раз перепроверьте код