Что такое GitHub? | OTUS

Что такое GitHub?

Совсем недавно мы говорили про основы Git. В этом материале обсудим, что это такое — GitHub. Также вы узнаете про особенности продвинутого использования GitHub и ознакомитесь с некоторыми популярными командами.

GitHub — это платформа, хранящая различные Git-репозитории на своих многочисленных серверах. Также GitHub называют крупнейшим веб-сервисом для хостинга и совместной разработки IT-проектов. Гитхаб основан на системе контроля версий Git и разработан компанией GitHub на Ruby on Rails. Он бесплатен для тех проектов, которые имеют открытый исходный код. Для крупных корпоративных клиентов доступны платные тарифные планы.

Создатели говорят, что GitHub — это социальная сеть для разработчиков, ведь участники могут не только кодить, но и общаться, следить за новостями, комментировать правки других. Слоган GitHub — «Пишем код вместе» (Social Coding), хотя часто можно встретить и другую его интерпретацию, англоязычный вариант которой намекает на неформальность общения: Fork you! («Ответвись!»).

Возможности GitHub

Если вы являетесь пользователем GitHub, вы можете без проблем хранить удалённые репозитории на данных серверах и одновременно с этим вносить свой вклад в репозитории open-source. По сути GitHub дополняет использование Git, плюс открывает некоторые новые возможности.

К примеру, появляется возможность сделать форк удалённого репозитория, создав свою копию репозитория на GitHub-сервере. Это может быть полезным, если у вас отсутствуют права на создание ветви в оригинальном репозитории. После того, как вы используете команду git clone, ваш локальный репозиторий сможет отслеживать оригинальный репозиторий как upstream, а удалённый форк как origin.

После этого может возникнуть необходимость слить тематическую ветвь удалённого репозитория в основную ветвь оригинального. Для этого создаётся новый запрос на внесение изменений (Pull Request), причём GitHub проверит наличие конфликтов перед выполнением слияния. Также в запросе можно обсуждать код, а все коммиты, отправляемые вами в удалённую ветвь, автоматически добавятся в запрос.

Продвинутое использование GitHub: интерактивная подготовка

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

git add –i

В данной консоли пользователю доступны 8 команд: • update — для подготовки отслеживаемых файлов; • revert — убирает несколько либо один файл из подготовленной области; • status — показывает для каждого из файлов краткое описание (что подготовлено/не подготовлено); • add untracked — обеспечивает подготовку неотслеживаемого файла; • patch — служит для подготовки лишь части файла (это полезно, если вы изменили несколько функций, однако хотите разбить изменения на некоторое число коммитов); • quit — для выхода из интерактивной консоли; • diff — показывает перечень подготовленных файлов, плюс даёт возможность увидеть изменения по каждому из них; • help — показывает краткое описание каждой команды.

Если вы видите рядом с файлом символ *, это значит, что команда изменит его статус на «неподготовлен» либо «подготовлен» в зависимости от того, происходит откат либо обновление. Если нажмёте Enter, не введя данные ни в одно из подменю команды, имеющиеся файлы перейдут в подготовленное/неподготовленное состояние.

Учтите, что создание патчей возможно как в интерактивной консоли, так и посредством команды git add -p.

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

Для улучшения контроля над историей коммитов локальной ветви используют команду:

git rebase -i HEAD~n

Она открывает интерактивную консоль в целях перемещения набора последних n-коммитов, которые перечислены в порядке от старых к новым. Так вы сможете «отредактировать историю», но учтите, что оригинальные коммиты можно лишь переместить, но не изменить.

Также можно изменить порядок коммитов, поменяв порядок их перечисления.

Изменяем сообщение коммита в GitHub и разбиваем коммиты

Чтобы указать коммит, который нужно изменить, используют команду edit. Далее, когда Git будет выполнять перемещение, он на этом коммите остановится. После этого для изменения сообщения либо подготовки забытых файлов можно будет воспользоваться git commit –amend.

Когда желаете разделить коммит, введите после остановки git reset HEAD^ (в итоге HEAD будет перемещён назад на один коммит, а все изменённые в данном коммите файлы перейдут в статус «неподготовленные»). После этого можно зафиксировать файлы в отдельных коммитах привычным образом. После завершения редактирования, используйте команду:

git rebase --continue

Перезапись нескольких коммитов в GitHub

В некоторых случаях нужно перезаписать несколько коммитов — для этого предусмотрена команда git filter-branch. Допустим, если хотите удалить по ошибке зафиксированный файл, введите:

git filter-branch --tree-filter 'git rm -f <имя файла>' HEAD

При этом помните, что вся история перемещается.

Объединение нескольких коммитов в GitHub

7-20219-74aa02.jpg При работе над новой функцией в проекте можно постепенно фиксировать малейшие изменения в тематической ветви. Но это засоряет историю небольшими коммитами, что иногда не соответствует правилам проекта. Это можно исправить, если объединить ряд маленьких коммитов в один большой. Тут используйте команду pick, с помощью которой вы сможете выбрать первый коммит, а с помощью squash — все последующие. В результате Git применит все изменения в одном коммите, плюс попросит отредактировать сообщение для общего коммита.

Переносим отдельный коммит в GitHub

Кроме перемещения и слияния, вас может интересовать, например, какой-нибудь определённый коммит. Представьте, что есть локальная ветвь drafts, в которой вы трудитесь над несколькими потенциальными статьями, однако хотите опубликовать лишь одну из них. Чтобы это сделать, предусмотрена команда git cherry-pick. А чтобы получить определённые коммиты, используйте:

git log <основная ветка>..<тематическая>

Учтите, что так создаётся новый коммит, который лишь повторяет diff выбранного вами коммита. То есть он повторяет разницу между этим коммитом и предыдущим, однако не его состояние.

8-20219-f2df36.jpg

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто