Добрый день. Продолжаю свой рассказ про онлайн обучение по государственной программе «Цифровые профессии».
Продолжаю публикации непосредственно по программе обучения. Материал беру из лекций, чтобы можно было оценить ценность урока.
Git vs GitHub
Надо понимать и чётко осознавать, что Git и GitHub — разные вещи.
1. Git — это программа, которая устанавливается на компьютер, где локально выполняет указанные вами команды.
2. GitHub — это сервис компании Microsoft, который позволяет интегрироваться с программой Git и настроить удалённую работу с вашим репозиторием.
Таким образом, вы можете работать локально или хранить свой репозиторий на GitHub, используя команды, входящие в программу Git.
Git — программа, а GitHub — сервис, который позволяет удобнее работать с этой программой и настроить удалённую работу с репозиториями.
GitHub — далеко не единственный сервис.
Вернёмся к уже хорошо знакомой нам схеме, где есть наши черновики и черновики от какого-нибудь заказчика, научного руководителя, редактора, коллеги или ещё кого-то. Мы рассмотрели, как организовывать подобную схему с использованием ветвлений Git — создавать ветки, выводить часть работы в отдельную ветку, а после выполнения всех действий заводить результат обратно в основную ветку. У нас была ветка с чистовиком, мы называли её «Мастер», и соседние ветки, где выполнялись какие-то действия. Соответственно, эта схема локально уже может работать.
Посмотрим, как выполнять другие операции и сделать так, чтобы созданный нами локально репозиторий оказался на GitHub. Теперь выясним, как переместить наш репозиторий в интернет.
Для этого сделаем новую папку и назовём её Lesson 3_1. Откроем эту папку и создам в ней новый репозиторий. Сделаем это, воспользовавшись знакомыми нам операциями:
1. Откроем терминал.
2. Убедимся, что здесь нет никакого репозитория.
3. Создадим его через git init. Эта операция нам знакома.
4. Создадим здесь какой-нибудь файл и назовём его Hello world.md.
5. Напишем «Привет».
6. Сделаем коммит и узнаем статус.
7. Добавим файл Hello world.
8. Сделаем свой первый коммит.
9. Оставим месседж Initial commit.
У нас есть какой-то репозиторий, в котором мы что-то делали. Теперь нам надо, чтобы он оказался в интернете.
Для этого сначала создаём на каком-либо сервисе, на который хотим направить репозиторий, свой аккаунт. Обратите внимание, что скачать чужой репозиторий можно и без создания собственного аккаунта на этом сервисе. Если у вас есть ссылка, вам, по сути, ничего другого не требуется. А если хотите залить свой репозиторий в какой-то сервис, на этом сервисе придётся создать собственный аккаунт. Аккаунт можно назвать как угодно. Затем в правом верхнем углу надо нажать плюсик, выбрать новый репозиторий и дать ему какое-то имя. Назовём его пока Test. Так делать нежелательно, но важно знать, что имя может быть любым. Остальные параметры оставляем по умолчанию, ничего не редактируем, создаём новый репозиторий. GitHub предлагает советы. Он подсказывает, что можно сделать, чтобы начать работать с этим репозиторием. У нас есть два варианта. GitHub говорит, что на самом деле вариантов три.
1. Можно создать новый репозиторий через терминал и начать с этим работать.
2. Уже существующий репозиторий привязать к удалённому репозиторию.
3. Импортировать код из другого репозитория.
У нас уже есть репозиторий, который работает локально. И сейчас мы хотим эту информацию отправить на GitHub, чтобы она появилась в интернете. Для этого здесь есть подсказки. Нам надо ввести git remote add origin и строчку, указанную на GitHub. После этого указываем, что основная ветка — main, и отправляем изменения в репозиторий. Подробно все эти команды мы сейчас разбирать не будем. У нас всегда есть возможность скопировать перечисленные команды и просто вставить в свой проект, и всё прекрасно заработает. Сделаем только пометку, что git remote удалённый. То есть мы говорим программе Git, что появляется новый удалённый репозиторий. Далее указываем ссылку с адресом на удалённый репозиторий, с которой надо будет работать. Каждый раз, когда мы захотим что-то отправить в интернет, Git будет знать, что отправлять требуется на указанный адрес. По сути, мы связываем наш локальный репозиторий с удалённым репозиторием. Далее указываем, какая ветка будет основной, а затем направляем то, что у нас есть, на локальный репозиторий в интернет.
Если ваш репозиторий публичный, доступный для всех, есть надпись public около имени репозитория, то любой человек, владеющий этой ссылкой, сможет скопировать и сохранить себе ваш репозиторий. Соответственно, ваш друг, преподаватель или кто-либо ещё, обладая указанной ссылкой, сможет увидеть всё, что вы делали в репозитории, скачать локально через команду git clone и посмотреть историю изменений проделанной вами работы. Команда git clone позволяет копировать или клонировать к себе репозитории из интернета. Для этого мы обращаемся к программе Git, указываем параметр clone и после этого даём адрес того репозитория, который надо скачать. Далее в папке, где вызывается команда git clone, появляется новая папка. И уже внутри этой папки будет лежать полная копия указанного нами репозитория.
Однако pull служит составной командой. Она не только подгрузит все изменения, но и попытается смержить наши ветки. То есть указанная команда попытается произвести слияние состояния, которое было на GitHub, с состоянием, происходящим локально. Pull значит «тянуть». Эта команда позволяет скачать всё актуальное из нашего удалённого репозитория. Команда очень простая. Мы указываем программу git и параметр pull. Если возникают какие-то конфликты, то окошко будет таким же, как при конфликтах обычного git merge. То есть коменда состоит из двух частей: первая часть скачивает изменения с удалённого репозитория, а вторая — сливает эти изменения с текущим репозиторием.
Эта команда позволяет отправить то, что есть на нашем репозитории, на удалённый репозиторий. Требует авторизации. Если у нет прав на внесение изменений в репозиторий, Git не позволит это делать. Отправить (push) ваш локальный репозиторий в удалённый (на GitHub), при этом вам, возможно, потребуется авторизоваться на удалённом репозитории. Если сделаете это один раз, «подружите» ваш редактор VS Code с GitHub, в дальнейшем эту операцию проводить уже не понадобится. Push значит «толкать».
Теперь посмотрим, что происходит, когда работают программисты. Например, как это происходит в крупных компаниях или в проектах open source, то есть в проектах с открытыми исходными кодами. В этом случае создаётся один основной аккаунт, основной репозиторий. Доступ к этому репозиторию есть только у ограниченного числа лиц. Но другие люди тоже могут поучаствовать в проекте. Вспомним, например, как Линус Торвальдс создавал Linux. Можно создать конкретный репозиторий. Например, десяток программистов будет иметь доступ к этому репозиторию, отправлять туда изменения и выкачивать их. Но при этом 1 000 других энтузиастов тоже хотят поучаствовать в этом процессе, чтобы исправлять ошибки или добавлять какие-то незначительные улучшения. Однако давать им доступ на внесение изменений в основной репозиторий неправильно, так как это могут быть неопытные программисты. Они могут что-то испортить, а мы не хотим, чтобы в нашем проекте сломался какой-либо элемент. Однако полностью отказываться от их помощи тоже нехорошо. Эти люди могут найти какие-то ошибки, которые прошли мимо нас, и придумать дополнительные улучшения. Поэтому нам нужен инструмент, который позволит другим людям предлагать изменения в наш проект. В Git это pull request, где request — «запрос». Таким образом, pull request — это запрос на вливание в какой-то репозиторий.
Fork с английского переводится как «вилка». Соответственно, когда мы делаем Fork, появляется ответвление от изначального репозитория. Программисты тоже решили, что это похоже на вилку, поэтому назвали Fork. Далее командой git clone сделаем репозиторий — он появился. Это папка, которая не считается репозиторием. Это обычная папка. Внутри лежат два других репозитория. Внутри этой папки есть какой-то проект, и мы можем помочь этому проекту.
Продолжение следует.
Статья написана по материалам лекции: «Введение в контроль версий». Ильнар Шафигуллин, компания «GeekBrains».