Синхронизация репозиториев
Что такое SSH. Генерируем SSH-ключ
Представьте, что у вас есть ключ от двери, за которой хранится важный документ. Чтобы получить доступ к этому документу, вам нужно вставить ключ в замочную скважину и повернуть его. Поскольку ключ есть только у вас, ваш документ надёжно защищён от посторонних глаз.Чтобы получить доступ к репозиторию на GitHub, вам тоже нужно предоставить ключ, который подтверждает вашу личность и права на чтение или изменение данных. Без этого ключа доступ будет ограничен. Об этом и пойдёт речь в уроке.
Что такое SSH
Когда компьютеры обмениваются данными в сети, они следуют сетевым протоколам (англ. network protocols) — правилам обмена данными между компьютерами.
Один из наиболее распространённых сетевых протоколов — SSH (от англ. Secure Shell Protocol). Он обеспечивает безопасный обмен данными в сети. С помощью этого протокола можно получать данные с удалённого компьютера или отправлять их на него. Трафик шифруется, поэтому протокол безопасен.
SSH использует пару ключей для обеспечения безопасности — публичный и приватный:
- Приватный ключ (англ. private key) хранится только на вашем компьютере и не должен передаваться кому-либо ещё. Он используется для расшифровки данных.
- Публичный ключ (англ. public key) доступен всем и используется для шифрования данных. Они могут быть расшифрованы парным приватным ключом.
Только вы можете расшифровать данные с помощью приватного ключа, но любой владелец публичного ключа может их для вас зашифровать. Эти два ключа связаны и образуют SSH-пару. В будущем вы наверняка будете использовать их для взаимодействия с GitHub и другими удалёнными серверами.
Проверка наличия SSH-ключа
Прежде чем генерировать SSH-ключи, убедитесь, что у вас их ещё нет. По умолчанию директория с SSH-ключами находится в домашней директории пользователя. Перейдите в неё.
$ cd ~ # перешли в домашнюю директорию
Обычно SSH-ключи находятся в директории .ssh/
. Проверить наличие этой директории и файлов в ней можно с помощью следующей команды.
$ ls -la .ssh/ # вывели список созданных ключей
Инструкция по генерации SSH-ключа
Для генерации SSH-пары можно использовать программу ssh-keygen
. Откройте терминал и введите следующую команду.
$ ssh-keygen -t ed25519 -C "электронная почта, к которой привязан ваш аккаунт на GitHub"
После ввода отобразится такое сообщение.
> Generating public/private rsa key pair. # сгенерированы публичный и приватный ключи
Теперь в указанной директории появится пара ключей.
Программа запросит кодовую фразу (англ. passphrase) для доступа к SSH-ключу. Вы можете оставить поле пустым. Для этого нажмите Enter
, а затем ещё раз Enter
для подтверждения.
Готово! Теперь осталось проверить, что ключи действительно сгенерировались. Для этого вызовите эту команду.
ls -a ~/.ssh
На экране должны появиться два файла — один с расширением .pub
, другой — без. Файл в .pub
— публичный, им можно делиться с веб-сайтами или коллегами. Файл без расширения .pub
— приватный. Ни в коем случае не передавайте его никому!
Привязываем SSH-ключ к GitHub
В прошлом уроке вы сгенерировали SSH-ключ, но он пока не привязан к аккаунту на GitHub. Исправим это.
Инструкция по связыванию SSH-ключа и GitHub-аккаунта
1. После выполнения команды ssh-keygen
из предыдущего урока в директории ~/.ssh
будет создано два файла — id_ed25519
и id_ed25519.pub
(или id_rsa
и id_rsa.pub
— в зависимости от того, какой алгоритм вы использовали):
# скопировать содержимое ключа в буфер обмена: $ clip < ~/.ssh/id_rsa.pub # для ed25519: $ clip < ~/.ssh/id_ed25519.pub
2. Перейдите на GitHub и выберите пункт Settings (англ. «настройки») в меню аккаунта.
3. В меню слева нажмите на пункт SSH and GPG keys.
4. В открывшейся вкладке выберите New SSH key (англ. «новый SSH-ключ»).
5. В поле Title (англ. «заголовок») напишите название ключа. Например, Personal key (англ. «личный ключ»).
6. В поле Key type (англ. «тип ключа») должно быть Authentication Key (англ. «ключ аутентификации»).
7. В поле Key скопируйте ваш ключ из буфера обмена.
8. Нажмите на кнопку Add SSH key (англ. «добавить SSH-ключ»).
9. Проверьте правильность ключа с помощью следующей команды.
$ ssh -T [email protected]
Связываем локальный и удалённый репозитории
Сейчас у вас есть локальный репозиторий first-project
, который хранится на вашем компьютере, и удалённый репозиторий на GitHub. Вы сгенерировали SSH-ключ для безопасной работы и теперь готовы связать удалённый репозиторий с локальным.
Привязать удалённый репозиторий к локальному — git remote add
Перейдите на страницу удалённого репозитория, выберите тип SSH
и скопируйте URL. Кнопка справа позволит сделать это мгновенно.
Откройте консоль, перейдите в каталог локального репозитория и введите команду git remote add
(от англ. remote — «удалённый» и add — «добавить»).Скопировать кодBASH
$ cd ~/dev/first-project $ git remote add origin [email protected]:%ИМЯ_АККАУНТА%/first-project.git
Команде необходимо передать два параметра: имя удалённого репозитория и его URL. В качестве имени используйте слово origin
. А URL вы скопировали со страницы удалённого репозитория.
origin
(англ. «источник») — стандартный псевдоним, с помощью которого можно обращаться к главному удалённому репозиторию (обычно такой репозиторий один). Это значительно упрощает работу.
Убедиться, что репозитории связаны, — git remote -v
Отлично: вы связали локальный репозиторий с удалённым. Осталось убедиться, что всё работает, с помощью следующей команды.
$ git remote -v origin [email protected]:%ИМЯ_АККАУНТА%/%ИМЯ-ПРОЕКТА%.git (fetch) origin [email protected]:%ИМЯ_АККАУНТА%/%ИМЯ-ПРОЕКТА%.git (push)
В выводе вы должны увидеть две строчки, аналогичные тем, что показаны выше.
Флаг -v
— короткая форма флага --verbose
(англ. «подробный»). Он позволяет показать больше информации в выводе.
Синхронизируем локальный и удалённый репозитории
Вы зарегистрировались на GitHub, сгенерировали SSH-ключ и привязали локальный репозиторий к удалённому. Самое сложное позади! Теперь разберём, как выкладывать свои правки на удалённый репозиторий. Но сначала немного о ветках.
Основная ветка
Мы упоминали, что каждый коммит сохраняет актуальное состояние файлов. Сами же коммиты хранятся в ветках (англ. branch).
Если коммит — это снимок состояния файлов, то ветка — временна́я шкала, на которой расположены эти снимки. Ветка всегда начинается от одного из коммитов.
В репозитории может существовать сразу несколько веток — параллельных историй изменений. Также они могут соединяться друг с другом.
Самая первая ветка в репозитории появляется автоматически и называется main
(англ. «основная») или master
. Её имя нужно указывать при отправке коммитов на удалённый репозиторий или при получении их из него.
Отправить изменения на удалённый репозиторий — git push
Вы уже прошли весь «цикл коммита»: подготовили файлы с помощью git add
, закоммитили их с комментарием командой git commit -m
. Осталось загрузить содержимое локального репозитория на GitHub. За это отвечает команда git push
(от англ. push — «толкать»).
В первый раз эту команду нужно вызвать с флагом -u
и параметрами origin
(имя удалённого репозитория) и main
или master
(название текущей ветки). Флаг -u
свяжет локальную ветку с одноимённой удалённой. Как вы связывали локальный и удалённый репозитории в предыдущем уроке, так же и здесь нужно дополнительно связать ветки.
$ git push -u origin main # Если команда приведёт к ошибке, попробуйте # заменить main на master.
При взаимодействии с удалёнными репозиториями Git выводит в консоль отладочную информацию: количество объектов (файлов), которые отправляются на сервер, информацию о прогрессе сжатия и записи и так далее.Если вы указывали кодовую фразу при настройке SSH-ключей, её нужно будет ввести.
Зайдите в репозиторий first-project
на GitHub. Вы увидите, что в репозитории появились файлы с изменениями.
Работа с графическим интерфейсом GitHub
GitHub предоставляет удобный интерфейс для работы с репозиторием. Например, нажмите на кнопку commit в правой части страницы, чтобы просмотреть все коммиты в репозитории.
Задание для самостоятельной работы
1. Откройте проект first-project
и создайте в нём файл task.txt
с помощью touch
.
2. Откройте файл task.txt
в текстовом редакторе и внесите любые изменения. Затем сохраните и закройте файл.
3. Сделайте коммит и синхронизируйте изменения с удалённым репозиторием.
4. Воспользуйтесь интерфейсом GitHub, чтобы посмотреть ваш последний коммит. Для этого нажмите на имя коммита.
Файл README.md
Чтобы другие пользователи, а также потенциальные клиенты или работодатели могли понять, что представляет собой проект, его нужно описать. Такое описание принято указывать в файле README.md
(от англ. read — «прочитай» и me — «меня»). В этом уроке вы научитесь оформлять такие файлы.
Подробнее о том, зачем нужен README.md
Как правило, в README.md
проекта можно найти следующую информацию:
- Название проекта и его краткое описание: кем создан, для чего, какие решает задачи и какие закрывает проблемы.
- Технологии, которые применяются в проекте. В чём его отличие от аналогичных.
- Документация проекта — подробная инструкция о том, что представляет собой проект.
- Планы проекта, если они есть.
Вот пример файла README.md
для Git на GitHub.
Как создать и оформить README.md
README.md
— текстовый файл, который можно создать командой touch
, а затем редактировать так же, как и любой другой текстовый документ. Например, в блокноте.
Преимущество README.md
в том, что средства командной работы (такие, как GitHub) могут отображать его содержимое в браузере в виде удобной разметки. Для этого нужно не просто залить текст, но и настроить шрифт, заголовки и отступы с помощью markdown. Маркда́ун — это специальный язык разметки. Он позволяет красиво отформатировать текстовый документ.
Разберём базовый синтаксис этого языка. Все правила запоминать не нужно: при оформлении репозитория вы всегда можете вернуться к этому уроку.
Заголовки, абзацы и перенос
# H1 — заголовок первого уровня, самый большой ## H2 — заголовок второго уровня, поменьше ### H3 #### H4 ##### H5 ###### H6 — заголовок шестого уровня, самый маленький
#### Заголовок 4 Текст над чертой --- Текст под чертой
- Чтобы сделать разрыв строки, нужно поставить два пробела (в примере ниже они обозначены точками
⋅⋅
) или сочетание символов<br>
.
Текст до переноса⋅⋅ Текст после переноса <br> Текст после второго переноса
- Чтобы начать новый параграф, в конце предыдущей строки должно стоять два символа переноса. Для этого нужно нажать
Enter
два раза.
line another line
Если сделать один перенос строки, как в примере ниже, и не поставить два пробела, текст сольётся в одну строку.
line another line
Выделение текста
- Чтобы выделить текст курсивом (
*текст*
), его заключают в звёздочки (астериски) или нижние подчёркивания.
Курсив — это *звёздочки* или _подчёркивания_.
- Чтобы выделить текст полужирным шрифтом (
**текст**
), его окружают двойными звёздочками или двойными нижними подчёркиваниями.
Полужирный шрифт — двойные **звёздочки** или двойные __подчёркивания__. Можно совместить выделение **звёздочки и _подчёркивания_**.
~~Зачёркнутый текст.~~
Списки
1. Первый пункт нумерованного списка. 2. Второй пункт.
* первый пункт ненумерованного списка; * второй пункт ненумерованного списка - первый пункт ненумерованного списка; - второй пункт ненумерованного списка
Ссылки
- Чтобы сделать ссылкой часть текста, его заключают в квадратные скобки, а затем указывают нужный адрес в круглых скобках.
[Яндекс](https://www.yandex.ru)
- Также можно добавить ссылке тайтл (от англ title — «название», «заголовок»). Тайтл — это всплывающая подсказка, которая появляется при наведении мыши на ссылку. Тайтл нужно заключить в кавычки и указать внутри скобок после адреса.
[Яндекс](https://www.yandex.ru "Я Yandex!")
Код
Чтобы оформить текст как код, нужно окружить его тройками косых кавычек — грависов. После первой тройки грависов указывают язык программирования, на котором написан код. В маркдауне есть поддержка синтаксиса почти всех популярных языков и инструментов.
```bash ls - la ``` ```html <h1>А я просто текст</h1> ```
Обратите внимание: вторая тройка тройных кавычек стоит на отдельной строке.