Основы Git и Github - efanov/mephi GitHub Wiki

Целью данного руководства является подготовка студентов к работе с системой контроля версий Git.

Основной ресурс, рекомендуемый к изучению: https://git-scm.com/book/ru/v2. Главы ниже кратко повторяют содержание этой книги. В соответствующих главах ниже, где применимо, приведены ссылки на более подробные главы из ресурса.

Содержание

Среда выполнения

Виртуальная машина под управлением Rocky Linux 9 (см. Подготовка среды выполнения работы).

Установка Git

Выполните следующую команду. Может потребоваться ввод пароля пользователя, от лица которого Вы её выполняете.

sudo dnf install -y git

Настройка GitHub

GitHub — сайт, на котором можно хранить свои Git-репозитории удалённо, что оказывается очень удобным для удалённого взаимодействия разработчиков или же работы с нескольких компьютеров.

Для начала использования зарегистрируйтесь на GitHub. Далее необходимо сформировать ключевую пару для доступа к GitHub из Git. Зайдите на виртуальную машину от лица Вашего пользователя и выполните следующую команду:

ssh-keygen -t ed25519 -C github -f ~/.ssh/github

Следуйте указаниям на экране. По итогу будет сгенерирована ключевая пара:

  • ~/.ssh/github — приватный ключ, который нельзя никому показывать,
  • ~/.ssh/github.pub — публичный ключ, который мы укажем на GitHub, чтобы получить доступ с данной виртуальной машины.

Просмотрите ключ, выполнив

cat ~/.ssh/github.pub

Скопируйте его. Далее перейдите на GitHub, нажмите на иконку Вашего профиля > Settings (Настройки) > SSH and GPG keys (Ключи SSH и GPG) > New SSH key (Добавить ключ SSH).

Screenshot 2024-09-08 at 17 47 50

Введите произвольное имя ключа, тип ключа оставьте, как есть, и в поле Key (Ключ) введите скопированный ключ. Нажмите Add SSH key (Добавить ключ SSH).

На виртуальной машине создайте файл ~/.ssh/config и в нём укажите следующую информацию, заменив <username> на Ваше имя пользователя на GitHub:

Host github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/github
    User <username>

Сохраните файл, закройте текстовый редактор. Следуя официальному руководству, выполните следующую команду для проверки соединения:

Будет задан вопрос о доверии к ключу GitHub:

The authenticity of host 'github.com (IP ADDRESS)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
Are you sure you want to continue connecting (yes/no)?

Убедитесь, что отпечаток в сообщении соответствует отпечаток открытого ключа GitHub. Если это так, введите yes и нажмите <Enter>. Должно появиться сообщение вида

Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

Настройка завершена.

Первоначальная настройка Git

Для первоначальной настройки Git в виртуальной машине выполните следующие команды, указав вместо <name> своё настоящее имя и вместо <email> электронную почту, которую Вы указывали при регистрации на GitHub:

git config --global user.name "<name>"
git config --global user.email "<email>"

Если Вы не знакомы с текстовым редактором Vim и не хотите в нём разбираться, укажите другой текстовый редактор, который будет использоваться, если будет нужно набрать сообщение в Git. В примере ниже выбирается редактор Nano:

sudo dnf install -y nano
git config --global core.editor nano

Соответствующая глава из книги по Git.

Создание Git-репозитория

Создание нового репозитория

Создайте папку с проектом, перейдите в неё и инициализируйте в ней репозиторий:

mkdir -p ~/projects/test-repo
cd ~/projects/test-repo
git init

Форк существующего репозитория

Рассмотрим классический процесс работы над репозиторием. Перейдите по ссылке на страницу репозитория PyAra: https://github.com/efanov/pyara (опционально поставьте звёздочку 😊).

  1. Нажмите Fork.

    Screenshot 2024-09-08 at 17 24 07
  2. Нажмите Create Fork.

    Screenshot 2024-09-08 at 17 29 12
  3. После этого откроется страница с форком. Склонируйте репозиторий на компьютер. Для этого нажмите Code > SSH > Копировать.

    Screenshot 2024-09-08 at 17 33 33

В виртуальной машине перейдите в папку ~/projects и склонируйте к себе репозиторий:

cd ~/projects
git clone [email protected]:<username>/pyara.git

Вы также можете склонировать репозиторий без форка:

git clone [email protected]:efanov/pyara.git

или

git clone https://github.com/efanov/pyara.git

Соответствующая глава из книги по Git

Запись изменений в репозиторий

Примечание: для лучшего понимания рекомендуется прочитать соответствующую главу из книги по Git.

Создайте файлы first_file.txt и second_file.txt с произвольным текстом и добавьте их в репозиторий. Смысл команд ниже станет ясен немного позже.

echo "First file text." > first_file.txt
echo "Second file text." > second_file.txt
git add *.txt
git commit -m "initial commit"

Внесите изменения в файл first_file.txt:

echo "New first file text." > first_file.txt

Для просмотра изменений выполните git status:

git status

Добавьте изменения файла first_file.txt в следующий коммит:

git add first_file.txt

Посмотрите, как изменился вывод команды git status:

git status

Внесите изменения в файл second_file.txt:

echo "New second file text." > second_file.txt

Снова посмотрите, как изменился вывод команды git status:

git status

Теперь сделайте коммит текущих добавленных изменений (только файл first_file.txt). Флаг -m задаёт строку, которая пойдёт в историю коммитов.

git commit -m 'change first_file.txt'

Снова посмотрите, как изменился вывод команды git status:

git status

Самостоятельно внесите изменения в second_file.txt и закоммиттье их.

Соответствующая глава из книги по Git

Просмотр истории коммитов

Для просмотра истории коммитов выполните git log или git log --oneline.

Соответствующая глава из книги по Git

Операции отмены

Если вы хотите изменить последний коммит, внесите необходимые изменения и выполните

git commit --amend

Для отката изменений файла <file> выполните

git restore <file>

Для отмены индексации (отслеживания) файла системой контроля версий выполните

git restore --staged <file>

Соответствующая глава из книги по Git

Работа с удалёнными репозиториями

Для того, чтобы подключить к текущему репозиторию удалённый, который, например, находится на GitHub, выполните, где <uri> замените на ссылку на Ваш удалённый репозиторий по протоколу HTTPS или SSH (для GitHub принципиально, чтобы это была ссылка именно SSH):

git remote add origin <uri>

Для того, чтобы получить изменения с удалённого репозитория, выполните

git pull

Для того, чтобы отправить изменения на удалённый сервер, выполните

git push <куда> <откуда> --set-upstream

Флаг --set-upstream необходимо написать один раз. Далее команду git push можно использовать без дополнительных аргументов.

Соответствующая глава из книги по Git

⚠️ **GitHub.com Fallback** ⚠️