Что такое 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-сервере. Это может быть полезным, если у вас отсутствуют права на создание ветви в оригинальном репозитории. После того, как вы используете команду
После этого может возникнуть необходимость слить тематическую ветвь удалённого репозитория в основную ветвь оригинального. Для этого создаётся новый запрос на внесение изменений (Pull Request), причём GitHub проверит наличие конфликтов перед выполнением слияния. Также в запросе можно обсуждать код, а все коммиты, отправляемые вами в удалённую ветвь, автоматически добавятся в запрос.
Продвинутое использование GitHub: интерактивная подготовка
В GitHub можно удобно управлять областью подготовленных файлов (допустим, для фиксации вместо одного большого коммита нескольких небольших). Для этого используется интерактивная консоль, запускаемая следующим образом:
git add –i
В данной консоли пользователю доступны 8 команд:
•
Если вы видите рядом с файлом символ
Учтите, что создание патчей возможно как в интерактивной консоли, так и посредством команды
Продвинутое использование GitHub: правим историю
Для улучшения контроля над историей коммитов локальной ветви используют команду:
git rebase -i HEAD~n
Она открывает интерактивную консоль в целях перемещения набора последних n-коммитов, которые перечислены в порядке от старых к новым. Так вы сможете «отредактировать историю», но учтите, что оригинальные коммиты можно лишь переместить, но не изменить.
Также можно изменить порядок коммитов, поменяв порядок их перечисления.
Изменяем сообщение коммита в GitHub и разбиваем коммиты
Чтобы указать коммит, который нужно изменить, используют команду
Когда желаете разделить коммит, введите после остановки
git rebase --continue
Перезапись нескольких коммитов в GitHub
В некоторых случаях нужно перезаписать несколько коммитов — для этого предусмотрена команда
git filter-branch --tree-filter 'git rm -f <имя файла>' HEAD
При этом помните, что вся история перемещается.
Объединение нескольких коммитов в GitHub
При работе над новой функцией в проекте можно постепенно фиксировать малейшие изменения в тематической ветви. Но это засоряет историю небольшими коммитами, что иногда не соответствует правилам проекта. Это можно исправить, если объединить ряд маленьких коммитов в один большой. Тут используйте команду
Переносим отдельный коммит в GitHub
Кроме перемещения и слияния, вас может интересовать, например, какой-нибудь определённый коммит. Представьте, что есть локальная ветвь drafts, в которой вы трудитесь над несколькими потенциальными статьями, однако хотите опубликовать лишь одну из них. Чтобы это сделать, предусмотрена команда
git log <основная ветка>..<тематическая>
Учтите, что так создаётся новый коммит, который лишь повторяет diff выбранного вами коммита. То есть он повторяет разницу между этим коммитом и предыдущим, однако не его состояние.