Блог

Как связать локальный репозиторий с удаленным на GitHub

Исходные данные

Статья в первую очередь адресована тем, кто уже

  • создал ssh-ключи на своей локальной машине,
  • добавил их в свой аккаунт на GitHub
  • и испытывает острую потребность регулярно сохранять изменение своих проектов на удалённм репозитории.
  • Если же Вы пока ещё не готовы смело зачернуть все пункты извышеперечисленных, то рекомендуется для начала ознакомиться с этой статьёй:

Всем остальным предлагается 2 способа связать локальный репозиторий с удалённым:

  1. Создать удалённый репозиторий на GitHub и связать его с уже созданным ранее локальным репозиторием
  2. Создать удалённый репозиторий, клонировать его на локальную машину и перенести туда свой проект

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

GitHub: настроить ветвь по умолчанию и создать новый репозиторий

Прежде всего, настоятельно рекомендуется облегчить себе жизнь на будущее и вернуть дефолтное название основной ветви снова на master. Зто позволит вам избежать путаницы в названиях и ненужных ошибок в дальнейшей работе. Поскольку имено master является дефолным названием ветви во вновь создаваемых локальных репозиториях.

Для этого нужно в GitHub нажать на пиктограмму своего аватара в правом верхнем углу, далее выбрать "Settings" (Настройки).

На открывшейся странице в разделе "Code, planning, and automation" (Код, планирование и автоматизация) выбрать "Repositories" (Репозитории) и в разделе "Repository default branch" (Ветвь репозитория по умолчанию) заменить значение main на master. (И, конечно же, не забыть после этого нажать кнопку Update!)

Теперь можно смело создавать новые репозитории. Для этого мы переходим в список репозиторием и нажимает кнопку New. Выбирать какие-либо опции (особенно в первом случае!) совсем не обязательно. Более подробно эта процедура рассмотрена в видео (ссылка в конце статьи).

1. Создать удалённый репозиторий на GitHub и связать его с уже созданным ранее локальным репозиторием

Если вы выбрали этот путь, значит на вашей локальной машине уже есть рабочая папка, в который вы уже когда-то ввели в терминале

git init

И, возможно, там даже есть своя история коммитов.

В это случае, копируем SSH адрес внось созданного репозитория и вводим терминале локального репозитория команду:

git remote add origin <your repository name>

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

git add --all && git commit -m "your commit"

И после этого добавить всю эту информацию в удалённый:

git push -fu origin master

Важно! Префикс -f использован для случая, если вы уже успели что-то записать в удалённый репозиторий, но эта информация вам не нужна. Поэтому запись этого обновления локального репозитория полность перепишет всю информацию репозитория удалённого.

На этом, собственно, всё - удалённый репозиторий теперь привязан к локальному и готов к работе!

2. Создать удалённый репозиторий, клонировать его на локальную машину и перенести туда свой проект

Этот вариань несколько проще в реализации и идеально подойдёт тем, кто пока ещё не перешёл с git "на ты".

Для его воплощения в жизнь потребуется выбрать в окне терминала место, где будет находится локальный репозиторий, и далее ввести только одну команда:

git clone <your repository name>

Инициализация локального репозитория и его привязка к удалённому благополучно завершены и можно приступать к работе. Единственное дополнение: для создания коммитов после внесения изменений в проект сначала неободимо будет "опуститься" на 1 уровень вниз - в папку проекта (см. видео)

Более подробно со всей информацией, изложенной в статье, можно познакомиться в этом видео:

Читать дальше >>

Как установить SSH-ключ на GitHub

Для того, чтобы получить доступ к репозиторию на ГитХабе по ssh, прежде всего необходимо создать сам аккаунт.

Далее, после авторизации необходимо перейти в настройки аккаунта (кликнуть на значок своего аватара в правом верхнему углу экрана и выбрать пункт settings) --> SSH and GPG keys), и далее кликнуть кнопку New SSH key (тоже справа вверху).

Теперь в эти два открывшихся поля (Title и Key) необходимо вставить название ключа (любое) и код публичной части самого ключа (скопировать содержимое ключа).

Где их взять? Прежде всего есть смысл проверить, не сгенерировали ли вы свой ключ раньше и просто забыли об этом. Для этого надо перейти в папку Home и поискать там ключи в скрытой папке .ssh (предварительно в Навигаторе надо добавить возможность просмотра скрытых файлов). Другой способ обнаружить эту папку - через окно терминала по команде:

$ ls -al ~/.ssh

Если ключи есть, то мы увидим, как минимум, 4 строки текста

drwx------ 2 su su 4096 сеп 24 23:24 .
drwxr-xr-x 23 su su 4096 сеп 24 23:24 ..
-rw------- 1 su su 419 сеп 24 23:24 id_ed25519
-rw-r--r-- 1 su su 104 сеп 24 23:24 id_ed25519.pub

Ну, а если нет - то только две верхних. В этом случае, ключи нам придётся сгенерировать самостоятельно:

$ ssh-keygen -t ed25519 -C "my_email@example.com"

Система сообщит о начале процесса генерации и уточнит, под каким именем следует сохранить файл с ключом:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/su/.ssh/id_ed25519):

Просто соглашаемся (Enter).

Далее система сообщит о создании директории .ssh и предложит ввести фразу для пароля (вводить не обязательно):

Created directory '/home/su/.ssh'.
Enter passphrase (empty for no passphrase):

Если ввели пароль, то следующим шагом потребуется ввести подтверждение, если - нет, то просто нажмите Enter.

И в результате пароль будет сформирован и на экран будет выведено что-то вроде этого:

Enter same passphrase again:
Your identification has been saved in /home/su/.ssh/id_ed25519
Your public key has been saved in /home/su/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:FOkr66ZIZN5eTZ1omlY77s1GkgZtWa+A3NNDwEKCzcE my_email@example.com
The key's randomart image is:
+--[ED25519 256]--+
| =oo..oo |
| . E.. o.o |
| . *.= . |
| +.Ooo.. |
| o oS=oo |
| + . .B=.o |
| o . =++o |
| . o oo. +. |
| . o+..o.o |
+----[SHA256]-----+

Теперь необходимо перейти в папку .ssh и скопировать публичную часть ключа, которая находится в файле с расширением: .pud (id_ed25519.pub).

Содержимое именно этого файла нам надо скопировать и вставить в поле Key экрана настройки ключей на ГитХабе. Далее необходимо придумать имя для этого ключа (на случай если ключей будет несколько) и ввести это имя в поле Title. После заполнения обоих полей и нажатия кнопки Add SSH key, добавление ключа можно считать завершённым. И теперь неплохо бы было убедиться, что всё работает.

Для этого вводим в окне терминала команду тестового подключения к ГитХаб:

ssh -T git@github.com

Если ssh-ключи находятс в правильном месте, а публичный ключ корректно скопирован в настройки ГитХаб, то будет что-то вроде этого:

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

Теперь мы создадим в нашем репозитории тестовый проект, скопируем его на локальную машину, попробуем внести в наш проект изменения и "запушить" результат в репозиторий.

Нажимает "плюс" слева от аватара в верхнем правом углу ГитХаба, между "колокольчиком" и аватаром --> New repository

Далее, в открывшейся странице вводим имя проекта под Repository name, пишем несколько слов о проекте в разделе Description, отмечаем "добавить" для Add a README file и Add .gitignore, и в вариантах ".gitignore" выбираем Python. И в завершении всего нажимаем Create repository.

Проект создан, и теперь мы копируем его в папку на локальном компьютере, для чего в переключателе HTTPS / SSH выбираем последнее и копируем ссылку на наш только что созданный проект в репозитории ГитХаба.

Но перед тем, как скопировать, необходимо убедиться, установлен ли на нашим компьютере пакет git. Это можно сделать командой:

$ git --version

Если же окажется, что git не установлен, то применяем следующие команды;

$ sudo apt-get update
$ sudo apt-get install git

Теперь, непосредственно в той папке, где мы хотим разместить этот проект, открываем окно терминала (правая кнопка мыши --> "Open in Terminal"), и далее, в самом терминале вводим:

$ git clone git@github.com:it4each/my-project.git

При первом клонировании скорее всего мы получим что-то вроде этого:

Cloning into 'my-project'...
The authenticity of host 'github.com (140.82.121.4)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Отвечаем yes и проект успешно добавляется в указанную папку на нашем компьютере. Кроме того, адрес ГитХаба добавился в список известных хостов (см. далее).

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,140.82.121.4' (RSA) to the list of known hosts.
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (4/4), done.

И если мы теперь ещё раз исследуем содержимое папку ключей, то увидим в ней новый файл (known_hosts) с со списком известных хостов, куда добавлен и хост ГитХаба:

$ ls -al ~/.ssh drwx------ 2 su su 4096 сеп 25 10:49 .
drwxr-xr-x 23 su su 4096 сеп 24 23:39 ..
-rw------- 1 su su 411 сеп 24 23:43 id_ed25519
-rw-r--r-- 1 su su 102 сеп 24 23:43 id_ed25519.pub
-rw-r--r-- 1 su su 884 сеп 25 10:49 known_hosts

Теперь, для работы проекта нам необходимо создать виртуальное окружение. Для этого необходимо наличие пакетов pip3 и virtualenv. Если эти пакеты ещё не установлены, используем команды:

# install pip3
$ sudo apt-get install python3-pip  

# install virtual environment
$ sudo pip3 install virtualenv

Для создания виртуального окружения необходимо перейти в папку проекта и затем запустить команду установки:

$ cd my-project

$ virtualenv venv -p python3

Виртуальное окружение создано. Теперь его необходимо запустить:

user@user:~/Projects/django-app/my-project$ source venv/bin/activate

(venv) user@user:~/Projects/django-app/my-project$

Доказательство того, что виртуальное окружение запущено - появление в ответе системы папки venv в круглых скобках - (venv).

Устанавливаем первый пакет - пакет Django. И сразу же после его установки создаём новый проект (чтобы создать его внутри папки проекта, в конец команды добавляем точку):

$ pip3 install Django

$ django-admin startproject main .

Все установленные пакеты запоминаем в файле requirements.txt:

$ pip3 freeze > requirements.txt

Теперь в нашей папке уже достаточно файлов для того, чтобы сделать первый коммит и сохранить проделанную работу в репозитории ГитХаба. Для этого сначала добавляем все созданные файлы командой add --all, затем создаём коммит commit и отправляем этот коммит в репозиторий командой push:

$ git add --all

$ git commit -am "first commit"

$ git push

Если всё прошло без ошибок, то в репозиторий должны добавиться следующие файлы:

[main 0a792bb] first commit
7 files changed, 200 insertions(+)
create mode 100644 main/__init__.py
create mode 100644 main/asgi.py
create mode 100644 main/settings.py
create mode 100644 main/urls.py
create mode 100644 main/wsgi.py
create mode 100755 manage.py
create mode 100644 requirements.txt

Обратите внимание, что самая большая по объёму папка нашего проекта - папка виртуального окружения venv в репозиторий не попала, поскольку по умолчанию находится в файле .gitignore - в списке файлов-исключений для копирования в удалённое хранилище. Если помните, добавить этот файл нам предложил ГитХаб при создании проекта my-project.

Следует заметить, что папки .idea для служебных файлов PyCharm в .gitignore нет. Поэтому, если вы будете использовать в создании вашего проекта эту IDE - не забудьте добавить исключение папки .idea самостоятельно.

Дополнительную информацию о добавлении SSH ключа и создании проекта можно получить из этого видео:

Читать дальше >>

Список тэгов

    Apps Script      Arrays Java Script      asynchronous code      asyncio      coroutine      Django      Dropdown List      Drop Shipping      Exceptions      GitHub      Google API      Google Apps Script      Google Docs      Google Drive      Google Sheets      multiprocessing      Parsing      Python      regex      Scraping      ssh      Test Driven Development (TDD)      threading      website monitoring      zip