Что такое GitHub и как он работает

Как пользоваться Github? Разработчики компании DST Global расскажут в гайде: путь от регистрации аккаунта и создания репозитория до управления проектами.

GitHub неразрывно связан с системой контроля версий Git, которую разработчики устанавливают на персональный компьютер. На базе Git есть платформа GitHub, где хранятся git-репозитории с открытым кодом. Это позволяет командам работать совместно. Чтобы разобраться, как всё устроено в GitHub, нужно понимать, зачем нужна система контроля версий Git (сокращённо VCS от англ. Version Control System).

GitHub — сайт для размещения IT-проектов, основанный на системе контроля версий. При помощи этой платформы программисты могут совместно работать над кодом. GitHub позволяет людям из разных точек земного шара вносить свои изменения в проекты, создавая новые улучшенные версии.

Что такое Git

Первым делом разберемся в терминологии. GitHub — это конкретный сайт, который работает на технологии контроля версий. Ее называют Git. Она лежит в основе практически всех аналогичных платформ.

Git создал в 2005 году отец Linux — Линус Торвальд. Он — один из евангелистов программного обеспечения с открытым исходным кодом. Над такими opensourсe-проектами одновременно работают сотни и тысячи программистов. А их исходный код публикуют в свободном доступе, чтобы каждый желающий мог внести свою лепту в разработку.

Для удобства этого процесса и создали Git. Изначально система распределенного контроля версий помогала программистам редактировать ядро Linux.

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

Принцип Git основан на сохранении состояния проекта. Он создает ссылку на определенную версию. Таким образом, можно отредактировать чужой код и оставить снимок новых файлов. А владельцу остается просмотреть изменения, а затем принять их или отклонить.

Нужно запомнить: Git — технология контроля версия, GitHub — платформа, работающая на ней.

Как появился GitHub

GitHub создал в 2008 году программист Том Престон-Вернер. Ему и его команде нужен был удобный инструмент для разработки opensourсe-проектов.

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

Так появился GitHub, ставший стандартом в своей сфере. Сейчас эта платформа — место для хранения проектов и совместной разработки, а также аналог социальной сети для разработчиков.

Что делают в GitHub:

- Выкладывают исходный код любой программы и разрешают другим пользователям вносить в него изменения;

- Проводят совместную работу в режиме реального времени, так как система сохраняет все новые версии ПО;

- Размещают статические сайты и приложения, развертывают небольшие проекты.

Кому нужен GitHub

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

А GitHub важен для социализации программиста и поиска первой работы. При помощи этого сервиса можно найти и принять участие в opensourсe-проектах. Они помогут получить первый опыт разработки и подтвердить его перед работодателем.

Зачастую о разработчике судят по содержимому его GitHub, в котором профессионалы хранят код своих проектов.

А еще на платформе можно найти полезные дополнительные материалы, пообщаться с разработчиками любимого ПО и оставить им отзыв в комментариях.

Можно ли обойтись без GitHub

На первых этапах обучения — да. Если вы пишете код для простых ученических работ или создаете небольшие проекты, их можно хранить локально на своем компьютере.

Обычно в первые месяцы обучения программисты так и делают. Но нужно понимать, что в будущем функциональность GitHub, скорее всего, понадобится.

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

Можно сказать, что рано или поздно освоить GitHub придется. Совершенно точно это стоит сделать до начала карьеры в коммерческой разработке.

В чём разница между Git и GitHub

С помощью Git программисты и разработчики ориентируются в коде и отслеживают изменения. Git помогает вернуть файлы в исходное состояние и видеть изменения, внесённые в определённый период. Разработчик выполняет разные команды (например, commit, push), а все изменения синхронизируются с центральным репозиторием.

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

Ещё один вариант — использовать GitHub как хранилище проектов для портфолио: легко дать на них ссылку.

Где научиться работать в Git

Делимся подборкой ресурсов, где можно учиться работать в Git.

1. Бесплатная книга Pro Git на официальном сайте Git.

2. Бесплатный онлайн-курс на английском и на русском языке.

3. Интерактивный-визуальный онлайн-тренажёр по Git.

4. Шпаргалка по Git, автор которой разместил сайт на самом GitHub. Это ещё одна его возможность — GitHub Pages.

Ещё один вариант — игра для изучения GIT Oh My Git!. Игра визуализирует внутреннюю структуру Git в режиме реального времени. Ученик подключает реальный репозиторий, изучает команды и выполняет их. Видит результат на игровом поле.

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

Альтернативы GitHub

Технология Git — незаменима для совместной работы над проектами. А вот GitHub как платформа имеет аналоги.

Просто этот сайт — самый популярный. Сейчас на нем зарегистрировались 83 миллиона пользователей, а количество опубликованных проектов перевалило за 200 миллионов.

В 2018 году сайт купил Microsoft, а значит в его использовании возможны риски. Например, отключение пользователей из определенных стран. Пока что об этом нет речи, но, если вдруг такое случится, нужно понимать, что аналоги у GitHub есть, просто они менее популярные.

Альтернативы GitHub:

- GitLab — один из самых старых аналогов, написанный на языке Go. За счет этого он отличается прекрасной производительностью. Его основное достоинство — охват всего жизненного цикла DevOps, что удобно для крупных проектов. У него, также как у GitHub, есть полностью функциональная бесплатная версия, которая покрывает большинство потребностей разработчиков;

- Gogs — решение для небольших команд и студентов, не имеющих серьезных требований к обилию инструментов. Это бесплатное решение, которое запускается на всех операционных системах и даже Raspberry Pi. Интерфейс сервиса максимально похож на упрощенный и лаконичный GitHub;

- Phabricator — проект Facebook, который изначально использовали только для работы внутри компании. Помимо Git поддерживает другие варианты репозиториев и легко устанавливается. Также в нем есть собственная доска для управления проектами;

- GitFlic — российский облачный сервис для совместной работы над проектами. Платформа пока не так функциональна, как более старые аналоги. Зато в ней есть интеграция с привычным в России ПО, например, с Telegram.

Основные термины в GitHub

На площадке есть несколько главных концепций, которые нужно сразу усвоить новичку — так будет проще освоиться. Все они пришли из английского, но не всегда интуитивно понятны.

Репозиторий (repository)

Это основная сущность в GitHub. Репозиторий — это страница проекта на платформе и корневая папка, в которой хранят все вложенные директории определенной программы.

На самом деле в репозитории располагают буквально все, что угодно. Но стандартно их используют для хостинга проектов: не только коды, но и, например, графики.

Репозиторий можно оставить в публичном доступе, а можно заприватить. Для управления репозиториями в GitHub используют командную строку, приложение для десктопа, а также IDE (с большинством у сервиса есть интеграция).

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

Ветки (branch)

Они нужны для группировки изменений в проекте. Например, вы разместили в репозитории первую версию своего сайта, которая будет главной. По умолчанию ей присвоят имя — main.

Если владелец репозитория или сторонний разработчик захочет что-то поменять, он создаст свою ветку с новой функциональностью, которую внесет на основе исходной.

Ветки могут существовать параллельно, при желании их можно объединить в одну при помощи слияния — merge.

Коммиты (commit)

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

Коммиты обычно вносят на локальном репозитории. А его публикацию на GitHub называют пушем — push. Пушить изменения — как бы «проталкивать» их в общее поле.

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

- Clone — клонировать или попросту скопировать репозиторий на свой локальный диск или собственный сервер;

- Fork — форкнуть или создать развилку, то есть новую ветку.

Слияние

Это вторая по популярности операция на GitHub. Допустим, вы с командой работаете над одним проектом: кто-то создает фронтенд, кто-то бэкенд или их части. После того, как вы закончили самостоятельную разработку, проект нужно собрать воедино.

То есть фактически объединить все ветку в одну. Для этого нужно провести пулл реквест (pull request). Заканчивая процесс, разработчик подает заявку на слияние всех веток.

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

До полного слияния, о котором мы говорили выше, члены команды обычно проводят код ревью (code review). То есть просматривают все изменения и проверяют их на предмет ошибок.

Стандартная работа с GitHub

Обычно процесс работы с платформой выглядит так:

- Программист копирует себе репозиторий или его часть;

- Работает над ним и по итогу создает новые ветки или коммиты;

- Отправляет пулл реквест на принятие изменений;

- Владелец проекта проводит код ревью, принимает их или отклоняет. В случае успеха, он объединяет эту ветку с основной.

Как начать работать с GitHub

Самый простой способ работы — загрузить на сайт платформы свой проект. Сделать это очень легко. Достаточно найти в правой панели знак «+», нажать на него и выбрать «New Repository».

Платформа предложит придумать название и описание. Лучше делать их осмысленными, если хотите работать с этими файлами совместно или демонстрировать их другим людям.

После создания описания нужно нажать на «Create Repository». Ваш первый репозиторий готов. Для загрузки зайдите в нужное хранилище и нажмите на «Add file».

Как искать проекты

Вторая по популярности функция GitHub — социальная. Пользователь может не только хранить свои проекты, но и просматривать чужие, которые находятся в свободном доступе.

Для этого на сайте есть система внутреннего поиска. Она ищет по ключевым словам, упомянутым в названии или коротком описании репозитория.

Дополнительно в нем содержится тип лицензии и частота обновлений, то есть — дата последнего релиза.

У проекта есть форки (аналог репостов) и звездочки (аналог лайков) — это местный рейтинг, обозначающий популярность репозитория. Чем их больше, тем интереснее для пользователей выложенный код.

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

Как научиться пользоваться GitHub

Самый простой способ по мнению разработчиков DST Global — разместить собственный репозиторий и поискать интересные opensource-проекты, в которые вы сможете внести свою лепту. Но не всегда это выглядит как простая задача.

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

У GitHub много дополнительных инструментов и неочевидных возможностей.

Что такое GitHub и как он работает
Получить консультацию у специалистов DST
Напишите нам прямо сейчас, наши специалисты расскажут об услугах и ответят на все ваши вопросы.
Комментарии и отзывы экспертов
RSS
19:19
+3
Насколько понимаю — Git — это распределённая система управления версиями: есть один сервер, через который разработчики обмениваются кодом. Разработчик копирует (клонирует) проект к себе на локальную машину, делает изменения и сохраняет их на удалённый сервер. При необходимости другие разработчики могут скопировать эти изменения к себе.
19:20
+4
Почти всё не так. Git — это распределённая система управления версиями, но это как раз о противоположном. С точки зрения git все репозитории (клоны репозитория) равноправны. Нет выделенного «сервера», есть много репозиторииев, обычно с общей частью истории коммитов. Более того, у git почти нет сервера — это просто утилита командной строки, просто есть несколько протоколов доступа к другим (reference) репозиториям. В самом git не ни аутентификации, ни прав доступа, ни истории pull request — ничего лишнего. Собственно, операция pull request достаточно специфична именно для git и отражает примерно следующее: «Я в своём репозитории сделал вот такие коммиты (с такими-то хешами родительских). Прими их, пожалуйста в свой репозиторий в ветку nnn». Т.е. не вы отправляете коммиты в чужой репозиторий, а просите «владельца» чужого репозитория их принять.

GitHub (но не git!), собственно, оборачивает этот достаточно сложный процесс совместной работы в простые и понятные схемы с «главным сервером» и наворачивает горку удобств (типа аутентификации, авторизации, история дискуссий, поиск и т.д. и т.п.)
00:59
+1
Как организовать работу с системами контроля версий для разработки нескольких проектов с общей основой?

Стоит следующая задача: мне надо создать хранилище, где будут разные файлы скриптов (например, A). Также будет хранилище, где будет стандартный набор файлов для начала программирования сайта (например, B). Когда я создаю новый проект — создается новое хранилище (например, C).

Теперь мне нужно в С перенести стандартный набор из хранилища В. Потом мне нужно из А перенести 2 скрипта в С. После этого я вижу, что в стандартных файлах (которые хранятся в В) есть ошибка. Я её исправляю и хочу залить как на В, так и на С. И так далее. То есть мне надо с ними 3-мя работать одновременно.

Уже пробовал git и svn, ничего не получилось. Решение через git submodule не подходит, т.к. общие файлы нужно редактировать в конкретных проектах, и при этом иметь возможность подтягивать изменения в этих же файлах из основного набора.

В какой системе контроля версий и каким образом можно организовать хранилища для решения этой задачи?
01:03 (отредактировано)
+1
git может такое.

Вообще у меня впечатление, что git может всё. Правда, механизм работы не слишком простой, нужно понимать, как он при этом будет работать.

Поскольку git по природе своей распределённый, я сэмулирую ваш порядок работы в одном локальном репозитории на нескольких несвязанных ветках: a, b и master. Изменения в этих ветках могут запросто появляться из других репозториев (разные ветки могут следить за разными серверами!), но при использовании такой методики у вас локально должен быть репозиторий, в котором есть все три.
Поехали по пунктам:

Положим, что git init вы сделали, а С (сам проект) лежит в ветке master (что совершенно необязательно).

создать хранилище, где будут разные файлы скриптов (например, A)

Делаем «несвязанную ветку»:

git checkout --orphan a


Зачищаем папку и индекс, чтобы начать с чистого листа:

git reset && git clean -f


Делаем коммит с фигнёй:

echo 'скрипт' | tee script_a_1 script_a_2
git add .
git commit # Тут вас попросят ввести сообщение для коммита


хранилище, где будет стандартный набор файлов для начала программирования сайта (например, B)

То же самое.

git checkout --orphan b
git reset && git clean -f
echo 'скрипт' | tee script_b_1 script_b_2
git add .
git commit # Сообщение для коммита


Когда я создаю новый проект — создается новое хранилище (например, C).

Будем считать, что это ветка master. И в настоящий момент она должна быть пуста, для git это означает, что она не существует, поэтому придётся делать её заново:

git checkout --orphan master
git reset && git clean -f


Теперь мне нужно в С перенести стандартный набор с хранилища В.

Мёрдж:

git merge b


При этом произойдёт fast-forward до b, master будет совпадать с веткой b. Это нормально. Ведь на этом этапе состояния файловой системы проекта совпадают, верно?

Потом мне нужно с А перенести 2 скрипта в С.

Мёрдж с a, но на сей раз с «тормозами», чтобы прямо перед коммитом git остановился:

git merge --no-commit --no-ff a


Зачем? Затем, что вам не все файлы нужны. На этом этапе вы можете убрать из индекса ненужные вам файлы из индекса с помощью reset, зачистить оставшееся и закоммитить результат:

git reset script_a_2
git clean -f
git commit


Теперь немного «поработаем», для вида:

echo work > work
git add work
git commit


в стандартных файлах (которые хранятся в В) есть ошибка. Я ей исправляю и хочу залить как на В…

Поскольку у вас (семантически) master основан на b, а не наоборот, ошибку вам надо починить именно в b, чтобы потом изменения «растеклись» (не автоматически!) по тем, кто ею пользуется. Идём в ветку b и чиним:

git checkout b # clean уже не нужен, т. к. ветка не пустая
echo script > script_b_1 # Ну, допустим, что кириллица не переварилась. Мало ли.
git add script_b_1
git commit


На этом этапе, если репозитории с b и master всё-таки разные, должен быть git push ветки b в соответствующий репозиторий, а в репозитории проекта нужно сделать git pull --ff-only (--ff-only разрешает только перемотку ветки — чтобы ваши изменения не «затекли» в b) в ветке, которая за тем репозиторием следит. Это уже отдельная тема, если интересно, расскажу и об этом.

… так и на С.

Переходим в ветку с проектом:

git checkout master


И делаем мердж ветки b в проект.

git merge b


Готово. Да, вот так просто!

После проделывания вышеописанных манипуляций, я получил в master следующую схему из коммитов (git log --graph):

*   commit 2e9219cb2922f70382a8f069fdc917bdbfccd4b8
|\  Merge: 2cc463a 1fc0b61
| | Author: Имя <адрес>
| | Date:   Sun Dec 27 14:46:12 2015 +0300
| | 
| |     мердж фикса
| |   
| * commit 1fc0b61c1017acf4b4ef1941e1cdcb01a7e86be4
| | Author: Имя <адрес>
| | Date:   Sun Dec 27 14:41:23 2015 +0300
| | 
| |     фикс основы
| |   
* | commit 2cc463ae97500bff4a304990aa4e42159da96fe9
| | Author: Имя <адрес>
| | Date:   Sun Dec 27 14:38:37 2015 +0300
| | 
| |     работа
| |     
* |   commit cfa122c954f77b3282f51511f94bc6d97c95d569
|\ \  Merge: 7da066c f9304d8
| |/  Author: Имя <адрес>
|/|   Date:   Sun Dec 27 14:31:20 2015 +0300
| |   
| |       мердж с удалением лишних
| |   
| * commit f9304d82d89600add270544bec32cd6661a8c150
|   Author: Имя <адрес>
|   Date:   Sun Dec 27 13:46:39 2015 +0300
|   
|       скриптики
|  
* commit 7da066c234216057ff19775a355342ed501fe9a4
  Author: Имя <адрес>
  Date:   Sun Dec 27 13:54:01 2015 +0300
 
      основа

И для наглядности, перерисовал:
Cпасибо, но я думал это можно сделать проще
01:04
+1
Это выглядит сложно, т. к. гит довольно весело ведёт себя с пустыми ветками и мне приходится делать дополнительные действия. На практике это на 90% «пуш в хелперы», «пул в проекте», «мёрдж хелперов в проект».
Вам может быть интересно
Традиционные решения для управления API с трудом справляются с распределенной природой Kubernetes. Познакомьтесь с некоторыми решениями от специалистов компании DST Global, для эффективного управления...
Изучите изменяемую инфраструктуру и неизменяемые структуры: узнайте от специалис...
В современной разработке большая часть приложений ...
В этой публикации специалисты из DST Global предст...
Десятилетие совершенства: путь, влияние и будущее ...
В статье подчеркивается важность создания комплекс...
Микросервисы — это тип архитектуры, который ...
Когда дело доходит до разработки программного обес...
Инструменты контейнеризацииКонтейнеризация —...

Новые комментарии

DST Platform это система управления контентом (CMS) на базе искусственного интел...
Конечно нашей компании не нужен встроенный ИИ в систему управления, но в будущем...
Работаем в DST CRM уже несколько лет, отличная и очень удобная система

Заявка на услуги DST

Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.

Адрес

Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117

8 495 1985800
Заказать звонок

Режим работы: Пн-Пт 10:00-19:00

info@dstglobal.ru

Задать вопрос по почте

Укажите ваше имя
Укажите ваше email
Укажите ваше телефон