На GitHub размещены миллионы Open Source проектов, но для начинающих разработчиков бывает достаточно сложно поначалу разобраться в принципах их работы, а также в интерфейсе сайта. Это краткое руководство поможет участвовать в проектах с открытым кодом, которые размещаются на GitHub.

Адаптированный перевод статьи The beginner's guide to contributing to a GitHub project. Здесь приведены только общие рекомендации по работе с Open Source из визуального интерфейса GitHub. Обязательно ознакомьтесь с README выбранного вами проекта для уточнения деталей.

Перевод был сделан для платформы курсов по программированию Хекслет

Шаг 0: Выберите проект

На эту тему очень много статей. Мы будем считать, что вы уже выбрали проект и решились на свой первый шаг. Для примера используется работа над реальным PR в проект Хекслет Sicp.

Шаг 1: Создайте рабочую копию на своем компьютере

Прежде всего, вам нужен локальный форк проекта, поэтому нажмите кнопку «Fork» в GitHub.

Это создаст копию репозитория в вашем аккаунте на GitHub. При переходе в вашу копию проекта вы увидите, откуда он был форкнут:

Теперь вам нужна локальная копия, найдите «SSH clone URL» — справа, вверху. Как настроить ssh-доступ к GitHub вы можете узнать на Хекслет в беплатном курсе Введение в Git

Используйте эту ссылку для клонирования проекта на ваш компьютер с помощью терминала. Если вы не знаете, как им пользоваться — на Хекслете есть большой курс по базовым командам в командной строке.

$ git clone git@github.com:AABur/hexlet-sicp.git

Результат будет выглядеть примерно так:

Перейдите в директорию нового проекта:

$ cd hexlet-sicp

Теперь необходимо установить связь локальной копии с оригинальным проектом, чтобы вы могли получать изменения основного проекта и вносить их в свою локальную копию. Сначала перейдите по ссылке в оригинальный репозиторий — она помечена как «forked from» в верхней части страницы GitHub. Это вернет вас на главную страницу проекта на GitHub, где вы сможете найти «SSH clone URL» и использовать его для создания новой связи, которую мы назовем upstream.

$ git remote add upstream git@github.com:Hexlet/hexlet-sicp.git

Теперь ваша локальная копия проекта связана с двумя репозиториями на GitHub:

  1. origin, который указывает на ваш форк проекта на GitHub. Вы можете читать его, и писать в этот репозиторий.

  2. upstream, который указывает на GitHub-репозиторий основного проекта. Этот репозиторий можно только читать.

Шаг 2: Заставьте его работать на вашей машине

Теперь, когда у вас есть исходный код, запустите его на своем компьютере. Надеюсь, в файле README или INSTALL этих проектов будет документация, как это сделать.

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

Шаг 3: Сделайте что-нибудь полезное

Это самый приятный этап — внести свой вклад в проект. Начните лучше c исправления ошибки, которая вас раздражает. Либо найдите подходящую в трекере проблем проекта — «Issues». Если вы не уверенны, с чего начать, многие проекты используют ярлык «good first issue» (или его разновидность), чтобы указать, что эту проблему может решить даже новичок в проекте.

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

Ветвление

Важное правило — размещать каждую часть разработки в отдельной ветке. Изучите, какая модель ветвления используется в проекте. Если в документации бранч-стратегия не описана, посмотрите, как называются уже существующие ветки. Вы можете назвать свою ветку как угодно, но важно, чтобы она была осмысленной. Названия веток типа «feature», «bugfix», «hotfix», «update» с указанием на то, что меняется — это лучший вариант.

В нашем примере мы исправляем README.md, поэтому мы создадим ветку readme-update:

$ git checkout master
$ git pull upstream master && git push origin master
$ git checkout -b readme-update

В первую очередь мы убеждаемся, что находимся на master-ветке. Затем команда git pull синхронизирует нашу локальную копию с основной веткой проекта, а команда git push синхронизирует ее с нашим форкнутым проектом на GitHub. Наконец, мы создаем новую ветку readme-update.

Теперь вы можете заняться устранением проблемы.

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

Убедитесь, что вы исправляете только то, над чем работаете. Не поддавайтесь искушению исправить другие вещи, которые вы видите по пути, включая проблемы форматирования, так как ваш PR, скорее всего, будет отклонен.

Убедитесь, что вы коммитите логичными блоками. Каждый коммит должен быть обоснованным. Прочитайте статью Как правильно составлять описания коммитов и почему это важно.

Шаг 4: Создайте Pull Request

Чтобы создать PR, вам нужно отправить ветку в ваш форк на GitHub, а затем нажать несколько кнопок на GitHub.

Чтобы отправить новую ветку:

$ git push -u origin readme-update

В результате будет создана ветка в вашем проекте на GitHub. Флаг -u связывает эту ветку с удаленной, так что в будущем вы сможете просто набрать git push origin в терминале.

Вернитесь в браузер и перейдите к вашему форку проекта (в нашем примере это будет выглядеть вот так, и вы увидите, что ваша новая ветка появилась в верхней части с удобной кнопкой «Compare & pull request»:

Нажмите эту кнопку!

Если вы видите выделенную надпись, как показано ниже:

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

На этой странице убедитесь, что «base repository» и «base» указывает на правильный репозиторий и ветку. Затем дайте хорошее, краткое название вашему запросу и объясните, почему вы его создали в поле описания. Добавьте соответствующие номера проблем, если они у вас есть.

Если вы прокрутите страницу немного вниз, вы увидите diff с вашими изменениями. Дважды проверьте, что он содержит то, что вы ожидаете.

Как только вы будете уверены, нажмите кнопку «Create pull request» и все — готово.

Шаг 5: Проверка разработчиками проекта

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

Зачем и как нужно ревьюить код, вы можете посмотреть Вебинар о код-ревью: зачем он нужен, как оптимизировать код и как делают в Skyeng.

Итоги

Главные этапы работы в Open Source:

  1. Форкни проект и склонируй его на свой компьютер.

  2. Установи связь с основным репозиторием проекта (upstream remote) и синхронизируй с ним локальную копию.

  3. Создавай локальный бранч для каждого логического блока работы.

  4. Внеси изменения, создавай хорошие описания коммитов и читай файл CONTRIBUTING, если он есть.

  5. Синхронизируй изменения со свом форком (origin remote).

  6. Создай Pull Request на GitHub.

  7. Отвечай на все замечания, полученные в ходе код-ревью.

Дополнение от переводчика

Оригинальная статья была написана в 2015 году. С тех пор вышла GitHub cli, и в git появились новые команды. Теперь эти шаги можно сделать ещё проще.

  1. gh repo fork Hexlet/hexlet-sicp

  2. git switch -c readme-update

  3. Тут делаем полезные изменения, например в README.md

  4. git push -u origin readme-update

  5. gh pr create --title "update README.md" --body "Slightly updated Russian README"

  6. Тут ревью кода и успешное принятие вашего PR

Комментарии (6)


  1. ScarferNV
    29.12.2021 20:19
    +1

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


  1. upagge
    30.12.2021 23:33

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

    Уж лучше бы тогда написали статью, как правильно оформить Issue :)


    1. CrazyElf
      31.12.2021 10:02
      +1

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


    1. AABur Автор
      31.12.2021 19:29

      Начинающему, да же изучавшему git, сделавшему какой-то учебный проект, даже с размещением на GutHub - всё равно сложно решиться. А тут простой пошаговый гайд. В этом и смысл.


  1. Tailogs
    31.12.2021 19:23

    Спасибо


  1. Dpal
    31.12.2021 19:23

    Спасибо! Полезная статья.