Как организовать сотрудничество на GitHub

Если вы еще не в курсе, GitHub это очень эффективный способ организации совместной работы над проектами.

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

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

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

Начните с малого

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

Не бойтесь начать с малого: вместо того, чтобы пытаться исправить большие ошибки (баги) или переписать целый модуль, попробуйте найти недостатки в документации или ошибки кроссплатформенности, или даже простые синтаксические и грамматические ошибки (пример на GitHub от пользователя mzgol).

Выполнение таких задач это отличный способ сделать первые шаги в качестве того, кто приложил руку к развитию какого-либо проекта, и при этом не брать на себя непосильные задачи. Зарегистрируйтесь на ресурсе CodeTriage, чтобы автоматически получать GitHub Issues в свой почтовый ящик.

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

Изучите экосистему проекта

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

Например, GitHub стандартизовал файл CONTRIBUTING.md (ознакомьтесь для примера с этим документом). Подобные инструкции поддерживаются людьми, которые обслуживают базы кодов.

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

Теперь, когда вы являетесь частью экосистемы проекта, как же вам все-таки внести изменения?

Использование Pull-Request для внесения изменений

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

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

  • Ответвлять выбранный репозиторий в ваш аккаунт;
  • Копировать репозиторий на локальную машину;
  • Выбирать ветку (topic branch) и вносить в неё изменения;
  • Переносить изменения из других веток в свою;
  • Использовать различные инструменты GitHub, чтобы создавать pull request’ы через обсуждения;
  • Применять полученные изменения;
  • Pull request сливается с проектом (как правило с основной веткой – master branch), а topic branch удаляется из репозитария.

Внутри рабочей среды, вы можете увидеть множество отличий между разными проектами. Например, различия в соглашениях о названии тем. Некоторые проекты могут использовать соглашения типа bug_345, где 345 это идентификатор (ID #) GitHub issue.

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

Шаг 1: Ответвление (Forking)

Ответвление репозитария на GitHub.com

Ответвление
Ответвление 2

Шаг 2: Клонирование

Клонировать репозитарий можно, используя URL-адрес, показанный на сайдбаре справа:

git clone git@github.com<script type="text/javascript">
/* <![CDATA[ */
(function(){try{var s,a,i,j,r,c,l,b=document.getElementsByTagName("script");l=b[b.length-1].previousSibling;a=l.getAttribute('data-cfemail');if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
/* ]]> */
</script>:jcutrell/jquery.git
Клонирование

Шаг 3: Добавление Upstream Remote

Внесите изменения в клонированную директорию и тогда вы сможете добавить upstream remote, то есть указать удаленный репозиторий, с которым будет происходить слияние локальных правок:

cd jquery
git remote add upstream git@github.com<script type="text/javascript">
/* <![CDATA[ */
(function(){try{var s,a,i,j,r,c,l,b=document.getElementsByTagName("script");l=b[b.length-1].previousSibling;a=l.getAttribute('data-cfemail');if(a){s='';r=parseInt(a.substr(0,2),16);for(j=2;a.length-j;j+=2){c=parseInt(a.substr(j,2),16)^r;s+=String.fromCharCode(c);}s=document.createTextNode(s);l.parentNode.replaceChild(s,l);}}catch(e){}})();
/* ]]> */
</script>:jquery/jquery.git

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

git fetch upstream
git merge upstream/master

Шаг 4: Выбор ветки (Topic Branch)

Перед внесением изменений, выберите ветку:

git checkout -b enhancement_345

Шаг 5: Создание правок

Теперь, вы можете внести изменения и создать коммит, который будет отслеживать только эти изменения:

git commit -am "adding a smileyface to the documentation."

Шаг 6: Внесение правок

Далее, необходимо внести изменения, сделанные в ветке вашего проекта:

git push origin enhancment_345

Шаг 7: Создание Pull Request’а

Наконец, вы можете создать pull request. Для этого, перейдите в вашу ветку репозитария. Там вы увидите надпись «Недавно измененные вами ветки» (your recently pushed branches), и если это так, можно выбрать «Сравнить и сделать Pull Request» (Compare and Pull Request).

В противном случае, вы можете выбрать вашу ветку из выпадающего списка и нажать «Pull Request» или «Compare» в верхней правой части секции репозитария.

Pull Request’а 2

Создание pull request через кнопку «Compare and Pull Request».

Compare and Pull Request2

Создание pull request посредством выпадающего списка веток

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

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

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

Как написал работник Github Зак Холман (Zach Holman) в документе «How GitHub Uses GitHub to Build GitHub», pull request это обсуждение. Именно в таком ключе они и должны восприниматься; вместо ожидания мгновенного принятия вашей правки, следует ждать её обсуждения.

GitHub Issues + Pull Requests = Дзен управления проектом

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

У Issues много отличных встроенных возможностей, но одна из наиболее важных, это интеграция с pull request’ами. Пользователь может сослаться на issue в своем коммите, просто добавив туда его цифровой ID.

Например:

git commit -am "Adding a header; fixes #3"

Этот коммит автоматически пометит issue №3 как закрытый, когда соответствующий pull request будет принят. Данный способ автоматизации делает GitHub прекрасным инструментом для управления процессом разработки.

Поиск других способов взаимодействия

Зачастую, большие open-source проекты имеют преимущество при совместной работе над ними нескольких людей.

Не заблуждайтесь думая, что единственным способом внести вклад в проект является использование pull request’ов.

Например, такой проект, как Ruby on Rails, был известен своим сообществом; оно отвечало на вопросы на форумах и IRC-чатах, чтобы помочь повысить осведомленность об этом фреймворке, а также помочь направить его развитие путем обсуждения идей и найденных ошибок.

Такие способы взаимодействия обычно представлены форумами и чатами. Но не только: это могут быть почтовые рассылки, аудио- и видеоконференции, которые могут помочь определить направление развития проекта и создать живое, продуктивное сообщество вокруг проекта. Без такого сообщества, pull request’ы не эффективны.

Все зависит от отношения

Запомните, что проекты с открытым кодом возглавляются людьми, для которых преумножение и распространение знаний является самым важным. Участие в таких проектах будет более эффективным, если вы будете иметь правильное отношение, смысл которого заключен в следующем вопросе: «Чем я могу помочь?», который отличается от отношения «Помогу, чем смогу».

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

Заключение

Если вы заинтересовались разработкой open-source проектов, то это прекрасно! Если вы решились принять участие в одном из них, то не забудьте о правильном отношении и принципе «начни с малого». Это приблизит вас к моменту, когда вы увидите свое имя в только что присоединенном к проекту pull request’е.

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

Потенциал GitHub и мир open-source продолжают свой рост каждый день; начните сотрудничать с другими разработчиками и станьте частью этого мира!

Перевод статьи «How to Collaborate On GitHub» был подготовлен дружной командой проекта Сайтостроение от А до Я.