Engee для профессионалов
Работа с Git
Введение в системы контроля версий
При работе над проектами часто возникает необходимость откатиться на предыдущие шаги или просмотреть внесенные изменения. Эти задачи усложняются, если над одним проектом работают несколько человек, особенно если они находятся в разных городах и странах. Для обеспечения структурированного, безопасного и удобного управления изменениями файлов необходимо использовать системы контроля версий.
В современной командной и проектной работе системы контроля версий играют ключевую роль в различных областях, включая разработку программного обеспечения, управление проектами, написание документации и научные исследования.
Для любой системы контроля версий общими остаются базовые понятия:
Репозиторий (repository) — центральное хранилище для управления и отслеживания изменений в файлах.
Коммит (commit) — завершенное и сохраненное изменение локального репозитория в конкретной ветке. Коммиты служат точками восстановления, к которым можно вернуться (откатить изменения) при необходимости.
Ветка (branch) — независимая последовательность коммитов, образующая параллельную версию репозитория и позволяющая работать параллельно главному репозиторию (ветвление).
С помощью веток реализуются ключевые возможности систем контроля версий — ветвление и слияние:
Ветвление позволяет создать независимые линии разработки, где каждый может работать над своей задачей без влияния на основную ветку. Это обеспечивает изоляцию изменений и параллельную разработку с возможностью последующего слияния изменений.
Слияние позволяет интегрировать изменения в основную ветку проекта. Слияние позволяет сохранить целостность проекта, объединяя разные ветки в единое целое. Это обеспечивает возможность сравнения и просмотра изменений, а также возврата к предыдущим версиям.
Engee использует Git — наиболее популярную распределенную систему контроля версий, распространяемую по свободной лицензии GNU General Public License version 2.0.
Git является распределенной системой управления версиями, потому что состоит как из удаленного репозитория, расположенного на сервере, так и локального, который хранится на компьютере пользователя:
Удаленный репозиторий (remote repository) — это репозиторий, расположенный на сервере и доступный пользователям по сети интернет. Все файлы, история коммитов и другие данные Git хранятся на удаленном сервере. Удаленный репозиторий поддерживает совместную работу — несколько разработчиков работают над одним и тем же проектом, обмениваясь изменениями со своих локальных репозиториев. Обычно располагается на хостинг-платформах, например: GitLab, GitHub или Bitbucket.
Локальный репозиторий (local repository) — это копия проекта и базы кода, которая хранится на локальном компьютере разработчика. Копия содержит полную историю изменений, ветки и другие объекты Git, сохраняя их локально.
Удаленные и локальные репозитории тесно связаны друг с другом:
- Локальный репозиторий может быть создан путем клонирования удаленного репозитория на компьютер разработчика.
- Разработчик может отправлять свои изменения из локального репозитория на удаленный и получать обновления с удаленного репозитория в локальный.
- Локальные и удаленные репозитории обеспечивают среду для совместной работы над проектом, позволяя разработчикам обмениваться изменениями и управлять версиями кода.
Каждый разработчик будет использовать свой локальный репозиторий, но в конечном итоге все наработки будут перенесены в удаленный репозиторий. Как только код окажется в удаленном репозитории, другие разработчики смогут видеть и работать с новыми изменениями.
Удаленный репозиторий
Работа с удаленным репозиторием git.engee.com
Примечание
Engee имеет собственный удаленный репозиторий на хостинге GitLab по ссылке. Все пользователи, зарегистрированные в Engee, по умолчанию имеют доступ к удаленному репозиторию под логином/паролем учетной записи Engee.
✏️Задание 1
Создайте собственный проект в удаленном репозитории:
- Зайдите на сайт удаленного репозитория Engee git.engee.com под логином/паролем от вашей учетной записи Engee. Если вы впервые заходите на этот сайт, то откроется стартовое меню создания собственного проекта или присоединения к уже существующим:
- Выберите Создание собственного проекта (Create a project). Откроется меню создания проекта. Будет предложен один из трех вариантов:
- Create blank project — создание пустого проекта для хранения файлов, планирования работы и совместной работы над кодом и/или для других целей.
- Create from template — создание проекта, предварительно заполненного необходимыми файлами, чтобы быстро приступить к работе. На выбор представлен ряд встроенных шаблонов под конкретные языки программирования и оболочки.
- Import project — перенос данных из внешнего источника, например GitHub, Bitbucket или другого экземпляра (хостинга) GitLab.
- Создайте пустой проект (blank project), указав имя (Project name) —
test, видимость (Visibility level) —Public, конфигурацию (Project configuration) —Initialize repository with a README(будет создан файлREADME.md) и индикатор (Project slug) —test:
Решение
Созданный проект выглядит так:
Теперь вы можете клонировать собственный удаленный репозиторий для работы локально:
Для работы с удаленным репозиторием Engee используйте SSH-ссылку.
Клонирование — это процесс скачивания публичного (удаленного) репозитория с хостинга в текущую папку. Можно клонировать как публичный репозиторий Engee и связанные с ним проекты, так и любые другие репозитории, к которым у вас есть доступ.
Вы можете клонировать чужие репозитории со знаком Public
(для публичного использования) с помощью SSH-ключа.
Работа с удаленными репозиториями в Engee
Для работы с удаленными репозиториями необходимо самостоятельно добавить SSH-ключ в Engee. Команды для добавления ключа вводятся в командную строку Engee в режиме оболочки (shell).
Совет
Для переключения командной строки в режим оболочки (shell) используйте точку с запятой ; — командная строка сменит вид с engee> на shell> и будет поддерживать все Git-команды.
✏️Задание 2
Создайте SSH-ключ по следующей инструкции:
- Сгенерируйте ключ с помощью команды
ssh-keygen, введя ее в командную строку в режиме оболочки (shell):
ssh-keygen -C "comment"
- Командная строка предложит сохранить получившийся ключ. Директорию сохранения ключа можно не менять. Далее нажимайте Enter на все запросы командной строки пока не получите
randomart— визуальное представление SSH-ключа.
Получение изображения означает, что ключ был успешно создан. По умолчанию ключ будет сохранен в файле id_rsa.pub, находящемся в папке /user/.ssh/id_rsa. Папка .ssh будет скрыта в файловом браузере Engee.
Решение
Визуальное представление SSH-ключа:
✏️Задание 3
Добавьте SSH-ключ в репозиторий:
-
В файловом браузере найдите и откройте файл
id_rsa.pubс SSH-ключом. Скопируйте содержимое SSH-ключа. -
Вернитесь на сайт хостинга git.engee.com. Нажмите на аватар пользователя и выберите в контекстном меню пункт Edit profile.
- Откройте раздел SSH-keys, вставьте ранее скопированный ключ в специально отведенное поле Key и нажмите на кнопку Add key:
Работа с Git в командной строке Engee
Engee поддерживает работу с Git через командную строку
.
Для клонирования удаленного репозитория с GitLab Engee используется команда git clone и ссылка на репозиторий:
git clone git@git.engee.com:имя пользователя/имя репозитория.git
После выполнения команды git clone в файловом браузере появится папка с именем удаленного репозитория. Папка является клонированным Git-репозиторием с адресом git@git.engee.com:имя пользователя/test.git.
Примечание
Все дальнейшие изменения при работе с Git в командной строке и файловом браузере будут работать только для этой папки, поэтому необходимо перейти в нее в файловом браузере.
✏️Задание 4
Клонируйте ваш репозиторий в Engee:
- Зайдите на страницу созданного вами проекта на хостинге git.engee.com. Нажмите кнопку Clone и выберите Clone with SSH -> Copy URL:
- В командной строке Engee (в режиме shell) введите команду для клонирования репозитория (введите
git cloneи далее через пробел вставьте из буфера обмена скопированный адрес репозитория):
git clone git@git.engee.com:имя пользователя/имя репозитория.git
В текущей папке появится папка с именем репозитория test, в ней будет находится содержимое вашего проекта, в данном случае файл README.md.
✏️Задание 5
Внесите изменения в локальный репозиторий и отправьте их на удаленный сервер:
-
В папке
testсоздайте новый файл и назовите егоfile.ngscript. Внесите в файл произвольные данные и сохраните его. -
В командной строке введите команду
git addдля индексирования измененного файла:
git add имя_файла
Примечание
Для индексирования всех файлов можно использовать команду git add ..
- В командной строке введите команду
git commit -m "имя коммита"для фиксирования всех индексируемых изменений:
git commit -m "Имя_коммита"
В качестве имени коммита вы можете ввести произвольный комментарий.
- В командной строке введите команду
git pushдля того, чтобы отправить изменения с локального репозитория (git-папки в файловом браузере) на удаленный сервер:
git push
Внесенные изменения отобразятся в удаленном репозитории на странице вашего проекта хостинга GitLab Engee.
Работа с Git в файловом браузере Engee
Файловый браузер поддерживает работу с удаленными и локальными репозиториями с помощью Git. В файловом браузере Engee используются два подхода для создания репозитория:
- Инициализация репозитория (Init) — создание собственного локального репозитория в текущей директории (папке).
- Клонирование репозитория (Clone) — создание копии существующего удаленного репозитория и работа с ним как с локальным репозиторием.
Инициализация репозитория
Инициализация — это процесс создания нового локального репозитория в текущей папке Engee.
Для этого нужно создать пустую папку в файловом браузере, перейти в нее и затем инициализировать Git, нажав по кнопке Init:
После инициализации локального репозитория откроется меню управления Git файлового браузера, где нужно указать ссылку на удаленный репозиторий, в который будут отправляться изменения:
Если локальный репозиторий не связан с удаленным, то в строке Статус будет отображаться сообщение: Your branch is not associated with any upstream branch.
После указания ссылки на удаленный репозиторий и при успешном подключении (если адрес введен верно и доступ открыт), рядом со строкой отобразится значок с зеленой галочкой:
После этого можно работать с Git-командами, реализованными в файловом браузере.
Реализованные команды
В файловом браузере с помощью кнопок реализованы следующие команды Git:
init— инициализирует пустой репозиторий в текущей папке.clone— клонирует существующий удаленный репозиторий в текущую папку.add— добавляет указанный файл в отслеживание. Если это папка, то добавляет все файлы локального репозитория в индекс.add all— добавляет все файлы в индекс.remove— удаляет указанный файл из отслеживания.commit— сохраняет изменения в рабочем каталоге локального репозитория. Команда фиксирует состояние проекта на определенный момент времени и сохраняет историю изменений.fetch— используется для скачивания изменений из удаленного или локального репозитория в свой локальный репозиторий.restore and pull— используется, чтобы обновить вашу локальную копию репозитория до самой последней версии. Это позволяет вам иметь актуальную копию кода и избежать конфликтов при объединении изменений.pull— извлекает и загружает содержимое из удаленного репозитория в локальный репозиторий и обновляет его этим содержимым.push— передает в удаленный репозиторий изменения, сделанные в локальном репозитории.
Клонирование репозитория
Для клонирования удаленного репозитория нужно нажать по кнопке Clone и вставить адрес удаленного репозитория:
После клонирования удаленного репозитория откроется меню управления Git файлового браузера. Доступность удаленного репозитория также будет отмечена зеленой галочкой:
После клонирования вы можете работать с проектом так же, как с любым локальным репозиторием. Теперь доступны все Git-команды, реализованные в файловом браузере.
Вне зависимости от выбранного вами способа создания локального репозитория:
- Файлы удаленного репозитория будут автоматически добавлены в файловый браузер.
- Текущая папка станет Git-репозиторием и будет поддерживать основные Git-команды, реализованные в файловом браузере.
- Если столбец Git скрыт, нажмите на знак многоточия в правом верхнем углу файлового браузера, выберите скрыть/показать в контекстном меню и нажмите на Git. В столбце Git вы можете добавить файл или папку в индекс с помощью Add для дальнейшей работы в Git или убрать из индекса с помощью Remove.
Отслеживание изменений в удаленном репозитории
Если локальный репозиторий в Engee не содержит последних изменений из удаленного, в строке Статус будет показано, сколько обновлений (коммитов) отсутствует. Например:
Your branch is behind 'origin/master' by 3 commit(s), and can be fast-forwarded.
Это означает, что в удаленном репозитории появились новые изменения.
Чтобы статус обновлялся автоматически, должна быть включена опция Auto Fetch Remote Changes (по умолчанию включена). Она находится рядом с настройкой удаленного репозитория:
Вы также можете вручную нажать Fetch, чтобы проверить наличие изменений.
Чтобы загрузить последние изменения в файловый браузер, используйте команду Restore and pull:
Работа с Git в интерактивных скриптах Engee
Командами Git можно также пользоваться в интерактивных скриптах Engee.
Перед началом работы с Git нужно подключить модуль engee_git.jl с помощью команды
include("$(@__DIR__)/engee_git.jl")
и перейти в файловом браузере в папку, в которой необходимо осуществлять контроль версий.
Рассмотрим наиболее важные команды для работы с Git в интерактивных скриптах Engee.
Создание и удаление репозитория Git
engee_git.init()— инициализировать локальный репозиторий в текущей папке;engee_git.clone("git@git.engee.com:namespace/repository.git")— клонировать удаленный репозиторий в текущую папку;engee_git.term()— удалить репозиторий из текущей папки;engee_git.remote("git@git.engee.com:namespace/origin.git")— привязать локальный репозиторий к удаленному.
Индексация изменений
engee_git.index_add()— проиндексировать изменение всех файлов в рабочем каталоге;engee_git.index_add("file1.txt file2.txt")— проиндексировать изменение указанных файлов;engee_git.index_reset()— отменить индексацию изменений всех файлов в рабочем каталоге, сохранив их текущее состояние;engee_git.index_reset("file1.txt file2.txt")— отменить индексацию изменений указанных файлов, сохранив их текущее состояние;engee_git.index_remove("file1.txt file2.txt")— перестать отслеживать изменение указанных файлов.
Фиксация изменений
engee_git.commit("Initial commit")— зафиксировать изменения;engee_git.commit_overwrite()— изменить последнюю фиксацию без изменения комментария;engee_git.commit_overwrite("New commit")— изменить последнюю фиксацию с перезаписью комментария.
Возврат к последнему зафиксированному состоянию
engee_git.reset()— вернуть репозиторий в последнее зафиксированное состояние;engee_git.reset("file1.txt file2.txt")— вернуть указанные файлы в последнее зафиксированное состояние.
Взаимодействие с удаленным репозиторием
engee_git.fetch()— получить изменения из удаленного репозитория;engee_git.pull()— получить изменения из удаленного репозитория и выполнить слияние с текущей веткой;engee_git.push()— отправить зафиксированные изменения в удаленный репозиторий;engee_git.push("force")— принудительно отправить зафиксированные изменения в удаленный репозиторий.
Ветвление
engee_git.branch_show()— вывести список веток репозитория;engee_git.branch_switch("master")— переключиться на существующую ветку;engee_git.branch_create("dev")— создать новую локальную ветку;engee_git.branch_create("feature", true)— cоздать новую локальную ветку и переключиться на нее;engee_git.branch_rename("main")— переименовать текущую ветку;engee_git.branch_remove("feature")— удалить ветку.
✏️Задание 6
Внесите изменения в локальный репозиторий и отправьте их на удаленный сервер с помощью команд в интерактивном скрипте Engee:
- В папке
testсоздайте новый файл и назовите егоfile2.ngscript. Внесите в файл произвольные данные и сохраните его. - Подключите модуль
engee_git.jlс помощью командыinclude. - Проиндексируйте изменение файла
file2.ngscriptс помощью командыengee_git.index_add. - Зафиксируйте изменения с помощью команды
engee_git.commit. - Отправьте зафиксированные изменения в удаленный репозиторий с помощью команды
engee_git.push().
Внесенные изменения отобразятся в удаленном репозитории на странице вашего проекта хостинга GitLab Engee.
Решение
include("$(@__DIR__)/engee_git.jl")
engee_git.index_add("file2.ngscript")
engee_git.commit("add 2nd file")
engee_git.push()