Как создать запрос на загрузку на GitHub

Вступление

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

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

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

Предпосылки

На вашем локальном компьютере должен быть установлен Git. Вы можете проверить, установлен ли Git на вашем компьютере, и пройти процесс установки для вашей операционной системы, выполнивthis guide.

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

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

Создать копию репозитория

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

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

Форк Репозиторий

Вы можете создать хранилище в GitHub, перейдя в браузере по URL-адресу GitHub проекта с открытым исходным кодом, в который вы хотели бы внести свой вклад.

URL-адреса хранилища GitHub будут ссылаться как на имя пользователя, связанное с владельцем хранилища, так и на имя хранилища. Например, сообщество DigitalOcean является владельцем репозитория проектаcloud_haiku, поэтому URL-адрес GitHub для этого проекта:

https://github.com/do-community/cloud_haiku

В приведенном выше примереdo-community - это имя пользователя, аcloud_haiku - имя репозитория.

После того, как вы определили проект, в который вы хотели бы внести свой вклад, вы можете перейти к URL-адресу, который будет отформатирован следующим образом:

https://github.com/username/repository

Или вы можете искать проект с помощью панели поиска GitHub.

Находясь на главной странице хранилища, вы увидите кнопку «Вилка» в верхней правой части страницы под значком пользователя:

GitHub Forking

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

Forking on GitHub

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

Итак, в приведенном выше примере вместоdo-community / cloud_haiku вверху страницы вы увидитеyour-username / cloud_haiku, а новый URL-адрес будет выглядеть так:

https://github.com/your-username/cloud_haiku

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

Клонировать репозиторий

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

Мы будем использовать командуgit clone вместе с URL-адресом, который указывает на вашу вилку репозитория.

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

https://github.com/your-username/cloud_haiku.git

В качестве альтернативы вы можете скопировать URL-адрес, используя зеленую кнопку «Клонировать или загрузить» со страницы своего репозитория, которую вы только что разбудили на исходной странице репозитория. После того, как вы нажмете кнопку, вы сможете скопировать URL-адрес, нажав кнопку подшивки рядом с URL-адресом:

GitHub Clone or Download

Получив URL, мы готовы клонировать репозиторий. Для этого мы объединим командуgit clone с URL-адресом репозитория из командной строки в окне терминала:

git clone https://github.com/your-username/repository.git

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

Создать новую ветку

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

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

При создании ветки очень важно, чтобы вы создали новую ветку вне основной ветки. Вы также должны убедиться, что название вашей ветки носит описательный характер. Вместо того, чтобы называть егоmy-branch, вы должны использоватьfrontend-hook-migration илиfix-documentation-typos.

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

cd repository

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

git branch new-branch

Теперь, когда наша новая ветка создана, мы можем переключиться, чтобы убедиться, что мы работаем над этой веткой, с помощью командыgit checkout:

git checkout new-branch

После ввода командыgit checkout вы получите следующий вывод:

OutputSwitched to branch 'new-branch'

В качестве альтернативы вы можете объединить две вышеуказанные команды, создав новую ветку и переключившись на нее, с помощью следующей команды и флага-b:

git checkout -b new-branch

Если вы хотите вернуться к мастеру, воспользуйтесь командойcheckout с именем основной ветки:

git checkout master

Командаcheckout позволит вам переключаться между несколькими ветвями, поэтому вы потенциально можете работать с несколькими функциями одновременно.

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

Вносить изменения локально

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

git add -A

Затем мы хотим записать изменения, которые мы внесли в репозиторий с помощью командыgit commit.

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

Если у нас очень короткое сообщение, мы можем записать его с помощью флага-m и сообщения в кавычках:

git commit -m "Fixed documentation typos"

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

git commit

Если вы хотите настроить текстовый редактор по умолчанию, вы можете сделать это с помощью командыgit config и установить nano в качестве редактора по умолчанию, например:

git config --global core.editor "nano"

Или vim:

git config --global core.editor "vim"

После выполнения командыgit commit, в зависимости от используемого по умолчанию текстового редактора, в окне терминала должен отображаться документ, готовый для редактирования, который будет выглядеть примерно так:

Файл GNU nano 2.0.6:… имя пользователя / репозиторий / .git / COMMIT_EDITMSG

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch new-branch
# Your branch is up-to-date with 'origin/new-branch'.
#
# Changes to be committed:
#       modified:   new-feature.py
#

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

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

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

git status

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

OutputOn branch new-branch
Your branch is ahead of 'origin/new-branch' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working directory clean

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

git push --set-upstream origin new-branch

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

OutputCounting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 336 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/your-username /respository .git
   a1f29a6..79c0e80  new-branch  -> new-branch
Branch new-branch set up to track remote branch new-branch  from origin.

Теперь вы можете перейти к разветвленному репозиторию на веб-странице GitHub и переключиться на ветку, которую вы только что нажали, чтобы увидеть изменения, которые вы внесли в браузер.

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

Обновить локальный репозиторий

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

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

Настройте пульт для вилки

Remote repositories позволяет вам сотрудничать с другими в проекте Git. Каждый удаленный репозиторий - это версия проекта, размещенная в Интернете или в сети, к которой у вас есть доступ. Каждый удаленный репозиторий должен быть доступен вам только для чтения или для чтения и записи, в зависимости от ваших пользовательских прав.

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

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

Из каталога репозитория в окне нашего терминала давайте воспользуемся командойgit remote вместе с флагом-v, чтобы отобразить URL-адреса, которые Git сохранил вместе с соответствующими удаленными короткими именами (как в «origin»). :

git remote -v

Так как мы клонировали репозиторий, наш вывод должен выглядеть примерно так:

Outputorigin  https://github.com/your-username/forked-repository.git (fetch)
origin  https://github.com/your-username/forked-repository.git (push)

Если вы ранее настроили более одного пульта ДУ, командаgit remote -v предоставит список их всех.

Далее мы укажем новый удаленный обратный репозиторий для синхронизации с форком. Это будет оригинальный репозиторий, из которого мы разветвлены. Сделаем это с помощью командыgit remote add.

git remote add upstream https://github.com/original-owner-username/original-repository.git

В этом примереupstream - это короткое имя, которое мы предоставили для удаленного репозитория, поскольку с точки зрения Git «восходящий поток» относится к репозиторию, из которого мы клонировали. Если мы хотим добавить удаленный указатель на хранилище соавтора, мы можем указать его имя или сокращенное имя для этого соавтора.

Мы можем убедиться, что наш удаленный указатель на вышестоящий репозиторий был правильно добавлен, снова используя командуgit remote -v из каталога репозитория:

git remote -v
Outputorigin  https://github.com/your-username/forked-repository.git (fetch)
origin  https://github.com/your-username/forked-repository.git (push)
upstream    https://github.com/original-owner-username/original-repository.git (fetch)
upstream    https://github.com/original-owner-username/original-repository.git (push)

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

Синхронизировать вилку

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

Чтобы синхронизировать нашу вилку, из каталога нашего локального репозитория в окне терминала мы воспользуемся командойgit fetch для извлечения веток вместе с их соответствующими коммитами из вышестоящего репозитория. Поскольку мы использовали короткое имя «upstream» для ссылки на вышестоящий репозиторий, мы передадим его команде:

git fetch upstream

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

OutputFrom https://github.com/original-owner-username/original-repository
 * [new branch]      master     -> upstream/master

Теперь фиксации в главной ветке будут храниться в локальной ветке с именемupstream/master.

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

git checkout master
OutputSwitched to branch 'master'

Теперь мы объединяем любые изменения, которые были внесены в основную ветку исходного репозитория, к которым мы получим доступ через нашу локальную ветвь upstream / master, с нашей локальной ветвью master:

git merge upstream/master

Вывод здесь может быть разным, но он будет начинаться сUpdating, если были внесены изменения, или сAlready up-to-date., если никаких изменений не было сделано с момента создания ответвления репозитория.

Основная ветвь вашей ветки теперь синхронизирована с вышестоящим репозиторием, и все ваши локальные изменения не были потеряны.

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

Создать запрос на извлечение

На этом этапе вы готовы сделать запрос на извлечение в исходное хранилище.

Вы должны перейти в свой разветвленный репозиторий и нажать кнопку «Новый запрос на извлечение» в левой части страницы.

GitHub Pull Request Button

Вы можете изменить ветку на следующем экране. На любом сайте вы можете выбрать соответствующий репозиторий из выпадающего меню и соответствующую ветку.

После того, как вы выбрали, например, главную ветвь исходного репозитория в левой части иnew-branch вашего разветвленного репозитория в правой части, вы должны увидеть экран, который выглядит следующим образом:

GitHub Pull Request

GitHub предупредит вас, что вы можете объединить две ветви, потому что нет конкурирующего кода. Вы должны добавить заголовок, комментарий, а затем нажать кнопку «Создать запрос на извлечение».

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

Заключение

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

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

Если вы хотите узнать больше о Git и сотрудничать в области открытого исходного кода, вы можете прочитать нашу серию руководств под названиемAn Introduction to Open Source. Если вы уже знакомы с Git и хотели бы использовать шпаргалку, вы можете обратиться к «https://www.digitalocean.com/community/tutorials/how-to-use-git-a-reference-guide[How Использовать Git: Справочное руководство]. »

Related