09.02 Работа с исходным кодом
На этом занятии не рекомендуется использовать личный ноутбук. Наша цель — освоить работу с удалённым репозиторием, в случае, когда локальная рабочая копия всегда под рукой, проверить, что у вас всё получилось, непросто.
- Структура учебной площадки:
- Студенческие логины
- Демо-экран
Использование демо-экрана
Простейший workflow работы с git
- Создание пустого bare репозитория git init --bare repo
- Синхронизация с опубликованным хранилищем:
- Клонирование (git clone URL-откуда куда) — git clone repo work
- Создание/редактирование файлов
- Добавление файлов к списку публикации (git add файлы)
- Создание комплекта изменений (git commit)
- описание изменений
- при необходимости — переход на п. 1
- Задание редактора коммитов вместо vim
- export EDITOR=geany и попробовать
- Вариант: export EDITOR="evim -gf" (а также nano или mcedit)
выбрать редактор и сохранить в конфигурации с помощью git config --global core.editor редактор
- Публикация одного или нескольких комплектов изменений (git push)
- при необходимости — переход на п. 1 )
- История в "удалённом" репозитории: git log ~/repo
Практическое занятие по пополнению хранилища: самостоятельно воспроизвести «простейший workflow» из предыдущего пункта
Созать bare repo («удалённый репорзиторий») newrepo
Склонировать, дальше работать с клоном («локальный репозиторий») project
Сделать два коммита в project
Запушить в newrepo
Отчитаться: git status чистый, в истории git log два коммита
- Мелкие хитрости
git commit -a — автоматический add для всех файлов, которые уже есть в рабочей копии (без Untracked)
вариант без редактирования git commit -m "сообщение"
Синхронизация локального хранилища с опубликованным (git pull)
например, два git clone, в одной из копий — commit и push, в другой — pull
Повторить упражнение:
Склонировать newrepo в otherproject
Создать в otherproject коммит и запушить в newrepo
Синхронизовать project с newrepo
FIXME К этому моменту осталось примерно 15 минут до конца пары, не успели
SSH и ключи
на базе факультетских машин
Разбиваемся на пары: выясняем hostname машины соседа (команда hostname); а если оно localhost, то IP-адрес (команда ip a)
ssh сосед
ssh-keygen с пассфразой
что такое открытый (.ssh/id_rsa.pub) и закрытый (~/.ssh/id_rsa) ключи
ssh-copy-id хост — добавление открытого ключа в ~/.ssh/authorized_keys на хост-е
Повторим ssh хост
- Надо вводить пассфразу
- Используем агента, который хранит в памяти распароленный закрытый ключ (по умолчанию в прошивке агент уже запущен)
Если агент не запущен, запустим его eval `ssh-agent`
Добавим ключ ssh-add
Снова пробуем ssh хост
- Должно пустить без пассфразы
Машины практикума устроены так, что сгенерированные на этом занятии публичный и секретный ключи лежат прямо на сетевом диске! Не используйте эти ключи иначе как для доступа к репозиторию практикума, для остальных случаев стоит иметь более секретные ☺.
- Репозиторий по SSH
git clone пользователь@адрес:путь
- …
Д/З
Почитать (и пощёлкать!) руководство по GIT
Проверить работоспособность вашего студенческого аккаунта на Факультетском GitLab (он совпадат с аккаунтом в машзале), а если его нет / не работает / неохота им пользоваться, завести аккаунт на GitHub или GitLab хостинге
в том числе необходимо сгенерировать пару открытый+закрытый ключ (с помощью ssh-keygen или чего-то аналогичного), положить открытую часть на git-хостинг, а закрытую принести на следующее занятие на флешке
- проверить, что репозиторий клонируется (на ваш компьютер) через протокол "git" (не "https")
Зарегистрировать созданный репозиторий в качестве комментария к этому Issue
Формат комментария: Фамилия Имя, группа, URL, где URL — это сслыка для клонирования вашего публичного репозитория