Продолжаем изучать систему контроля версий git. Сегодня говорим про GitHub. На прошлом уроке мы создали локальный репозиторий для проекта. Но хранить данные только на компьютере опасно, если папка с репозиторием удалится или потеряется, весь проект пропадет. Поэтому важно дублировать все файлы и историю их изменений на сервере. Самая популярная платформа, на которой разработчики размещают репозитории — GitHub. Зарегистрируйтесь на нем. Это так же просто, как создать аккаунт в соцсетях.
Настраиваем доступ по токену
Когда вы зарегистрировались и зашли в аккаунт, стоит настроить доступ по токену. Это важная мера безопасности. Даже если ваш пароль кто-то украдет, зайти в аккаунт он не сможет. Токен — более продвинутый метод защиты, чем пароль. Аутентификация по токену генерирует входные данные отдельно для каждого устройства и сеанса. У токенов можно менять права доступа или отзывать их. Подобрать токен перебором невозможно.
Переходим в меню под фото профиля. Settings → Developer settings → Personal access tokens → Create new token.
Разные токены нужны для разных доступов, чтобы не запутаться, давайте дадим нашему токену название tutorial. В настройках для начала достаточно поставить галочку рядом с repo. Создаем токен. Получившийся токен нужно обязательно сохранить в какой-то надежный файл, а лучше в менеджер паролей.
Откроем терминал по адресу нашего проекта. На mac нужно выбрать «новый терминал по адресу папки». На Windows будет вариант «GitBush here».
Чтобы настроить доступ по токену, воспользуемся уже известной утилитой git config: git config --global user.name <username, который задавали при регистрации>
Теперь вводим токен: git config --global user.password <ваш токен>
Устанавливаем двухфакторную аутентификацию
Вторая важная настройка безопасности — двухфакторная аутентификация. Settings → Password and Autentication → Enable Two-Factor Authentication.
В качестве второго фактора лучше использовать не SMS, а приложение, например Google Аuthenticator. Его нужно скачать на телефон, нажать на плюс, чтобы добавить новый код, затем отсканировать qr-код, который появится на сайте, и ввести сгенерированный шестизначный код. После этого нужно скачать коды восстановления и сохранить их в надежное место.
Создаем репозиторий на GitHub
Можем создать первый удаленный репозиторий. Нажимаем на + в правом верхнем углу, выбираем New repository.
Задаем имя репозитория, например, git_tutorial.
Можем добавить описание: «Учимся работать с удаленным репозиторием».
GitHub предлагает нам сразу создать два базовых файла README.md и .gitignore. Но у нас уже есть локальный репозиторий, с которым мы начали работать, добавим эти файлы в него. А на этом шаге просто нажимаем create repository.
Файлы README и gitignore
Файл README.md — это текстовый файл, в котором на языке markdown можно добавить описание проекта. Файл README необязателен, но помогает лучше ориентироваться в своих и чужих репозиториях. Давайте его добавим в нашу папку с проектом. Напишем заголовок «Тестовый репозиторий» и описание: «Это тестовый репозиторий, в котором я учусь работать с git».
Описания могут быть и гораздо более подробными, содержать картинки, ссылки, вставки кода. Подробнее о языке markdown можно прочитать в официальном гайде.
В проекте появился новый файл. Вернемся в терминал и добавим его в отслеживание: git add README.md
Закоммитим: git commit -m “Add README”
Файл .gitignore нужен, чтобы прописать те файлы, которые мы не хотим отслеживать. Это могут быть конфигурационные или временные файлы, которые автоматически создаются по ходу работы. Учесть все ненужные файлы, которые могут появиться, и самостоятельно создать gitignore-документ сложно. Поэтому можно использовать шаблоны, а потом уже дополнять их самостоятельно по ходу работы. Мы программируем на python, поэтому для примера я нашла gitignore для python. Создадим файл .gitignore в нашей папке и скопируем в него названия файлов.
Добавим новый файл в отслеживание и закоммитим изменения.
git add .gitignore
git commit -m “Add gitignore”
Проверим git status. Все закоммичено.
Теперь в репозитории есть все нужные файлы, можем добавить его на GitHub. GitHub можно использовать как обычное хранилище и загружать почти любые файлы. Для этого нужно нажать «загрузка нового файла» и выбрать, что мы хотим загрузить.
Можно таким путем добавить и наш репозиторий. Но так файлы просто скопируются из одного место в другое, а нам нужно привязать локальный репозиторий к серверу.
Просматриваем историю изменений
Вернемся в терминал. Вспомним, какие изменения мы уже локально коммитили на прошлом уроке. Посмотреть все коммиты можно с помощью команды git log. Сейчас мы видим все коммиты.
У каждого коммита есть уникальный идентификатор — набор цифр и букв. Мы видим кто и когда сделал каждый коммит, какое сообщение он написал. Подробнее посмотреть информацию о конкретном коммите можно с помощью команды: git show <5 первых символов идентификатора>
В таком режиме мы видим, какие изменения были внесены.
Зеленые плюсы — какие строки добавились, красные минусы — какие удалились.
Чтобы выйти из log, нужно нажать q в английской раскладке.
Еще раз посмотрим всю историю: git log. Наши изменения лежат в ветке master (на Windows будет ветка main), подробнее про ветки мы еще будем говорить на следующем занятии. Сейчас достаточно знать, что это основная ветка. Но на GitHub основная ветка называется main.
Чтобы не возникало проблем при сохранении проекта на сервере, переименуем нашу локальную ветку: git branch -m master main. (Для Windows это делать не нужно)
Проверим историю: git log. Видим, что ветка переименовалась.
Передаем репозиторий на сервер
Передадим наш репозиторий на сервер. Связаться с удаленным репозиторием можно по ссылке. Откроем репозиторий на GitHub и скопируем ссылку.
В открытом терминале пишем команду:
git remote add origin <ссылка на репозиторий>
(Чтобы вставить скопированную ссылку в терминал на Windows, нужно зажать ctrl и нажать левой кнопкой мыши или тачпада.)
Origin — это имя удаленного репозитория, которое мы будем дальше использовать вместо ссылки. Проверим, подключился ли репозиторий. Команда git remote -v показывает, какие удаленные репозитории присоединены. Мы видим присоединенный репозиторий.
Теперь можем отправить на него наш локальный репозиторий: git push -u origin main
Обновим страницу: наш репозиторий появился на сайте.
В заголовке видим последний коммит. Если нажмем на часы — увидим историю коммитов. Такую же, как в git log.
Теперь пройдем весь путь от внесения изменений, до передачи их на сервер.
Вносим изменения и исправляем ошибки
Вносим изменения в наш файл test.py: print(“We learn GitHub”)
Добавляем изменение в отслеживание и закоммитим: git commit -a -m “Add third line”
В работе над реальным проектом, важно емко описывать изменения, которые вы внесли. Это поможет лучше ориентироваться в репозитории.
Теперь давайте представим, что мы закоммитили ошибочное изменение. Допишем в файл строку: print(“False line”)
Добавим изменение в отслеживание и закоммитим: git commit -a -m “False commit”
Проверим историю: git log
Мы видим ошибочный коммит.
Чтобы отменить его, воспользуемся командой: git revert <первые 5 символов идентификатора коммита>
Мы попали в текстовый редактор, где уже есть сообщение об отмене коммита, можем написать другое сообщение или сохранить предложенное, чтобы выйти из текстового редактора нажмем cmd+X, затем y и enter.
Проверим историю: git log. Мы видим, что git создал новое сохранение с отменой коммита, а в файле ненужная строка удалилась.
Заливаем изменения на сервер
Проверим git status. Дерево чистое, можем заливать коммиты на сервер: git push. Нам не нужно еще раз писать origin main, потому изменения из ветки main на ветку origin мы уже передавали в прошлый раз. Откроем наш репозиторий на сайте. Зайдем в файл test.py. Видим, что третья строка появилась, а четвертая ошибочная строка не закоммитилась, как нам и было нужно.
Копируем удаленные репозитории
GitHub позволяет не только создавать свои репозитории, но и копировать чужие. Зайдем на GitHub «Важных историй», выберем любой репозиторий. Скопируем ссылку.
Создадим папку на компьютере для этого репозитория. Откроем терминал в этой папке. Введем команду git clone <ссылка на репозиторий>
Вы можете просто открыть папку и проверить, что в нее скопировались все файлы из репозитория.
Можно это сделать и в терминале, просмотрев все внутренние папки: ls
Перейдем в репозиторий: cd <название клонированной папки с репозиторием>
Теперь мы можем работать с этим репозиторием локально: вносить изменения, просматривать историю коммитов.
Если у вас появятся вопросы, попробуйте найти ответ в интернете. Часто достаточно скопировать полученную ошибку и забить ее в поиск в браузере. Если все же не получается найти ответ, пишите нам в чате в Telegram.