GitHub: fork, clone и другие

Существующие репозитории чаще всего используются в двух случаях: для начала разработки своего проекта, причем не с нуля, а с использованием чьего-либо кода (Open Source!) или же для того, чтобы предложить внесение изменений в чей-либо уже существующий код. При этом во втором случае предполагается, что все изменения вы вносите в свой репозиторий, а к принятию их предлагаете уже в готовом виде.

Fork

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

Давайте в качестве примера предположим, что нас одолело нестерпимое желание помочь в локализации справочной информации для PowerShell и мы решили создать копию репозитория PowerShell/powerShell-Docs.ru-ru.

При этом мы также предполагаем, что у нас уже создан профиль на сайте github.com, и установлен и настроен Git Bash.

Для разветвления репозитория нам нужно найти его на сайте github.com, в нашем случае это будет https://github.com/PowerShell/powerShell-Docs.ru-ru и в правом верхнем углу нажать кнопку Fork. Через некоторое время в нашем профиле мы увидим копию нужного нам репозитория.

Clone

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

Этот процесс называется клонированием.

Для начала, нам нужен адрес, по которому расположен наш репозиторий. Для этого мы заходим в свой профиль на сайте github.com, переходим в нужный нам репозиторий и нажимаем кнопку Clone or download. В результате откроется окно со ссылкой на этот репозиторий, которую нам потребуется скопировать.

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

git clone скопированная_на_предыдущем_шаге_ссылка

Syncing repos

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

Для начала нам нужно перейти на страницу оригинального репозитория, в нашем случае это https://github.com/PowerShell/powerShell-Docs.ru-ru, точно так же, как и в предыдущем случае, нажать кнопку Clone or download и скопировать предложенную ссылку в буфер обмена.

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

Если мы введем команду:

git remote -v

то мы увидим что-то вроде:

origin  git@github.com:username/powerShell-Docs.ru-ru.git (fetch)
origin  git@github.com:username/powerShell-Docs.ru-ru.git (push)

или:

origin  https://github.com:username/powerShell-Docs.ru-ru.git (fetch)
origin  https://github.com:username/powerShell-Docs.ru-ru.git (push)

Давайте добавим информацию об оригинальном репозитории при помощи команды:

git remote add upstream скопированная_нами_ссылка

Теперь, введя еще раз команду:

git remote -v

мы заметим, что вывод стал включать еще две строки:

origin  git@github.com:username/powerShell-Docs.ru-ru.git (fetch)
origin  git@github.com:username/powerShell-Docs.ru-ru.git (push)
upstream https://github.com/PowerShell/powerShell-Docs.ru-ru.git (fetch)
upstream https://github.com/PowerShell/powerShell-Docs.ru-ru.git (push)

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

Теперь давайте обсудим несколько терминов.

clone — это расположенный на вашем компьютере репозиторий. В него вы будете вносить изменения и синхронизировать с вашим репозиторием (origin), расположенным на сайте github.com

remote — это репозитории, которые находятся на сайте github.com. То есть, те, что не являются локальными. К ним относится и origin, и upstream.

origin — это репозиторий, расположенный в вашем профиле и находящийся на сайте github.com. Это тот репозиторий, с которого вы делали клон для использования на локальном компьютере.

upstream — это оригинальный репозиторий, на основе которого посредством операции fork был создан репозиторий, расположенный в вашем профиле сайта github.com. Именно его изменения вы будете синхронизировать в расположенный на вашем локальном компьютере репозиторий.

Что тут интересно, так это то, что при синхронизации изменений из upstream, будет затронут только локальный, расположенный на вашем компьютере, репозиторий. Для того, чтобы синхронизированные изменения были также отражены в вашем репозитории на сайте github.com (origin), вам потребуется использовать команду git push. Но об этом чуть позже.

Итак, мы добавили информацию об upstream, теперь перейдем непостредственно к процессу синхронизации.

Для того, чтобы получить информацию о произведенных в upstream изменениях, введем следующую команду:

git fetch upstream

Далее нам нужно выбрать ветвь (branch) локального репозитория, в которую мы собираемся синхронизировать изменения. Обычно она соответствует ветви оригинального (upstream) репозитория. В случае репозитория powerShell-Docs.ru-ru на момент написания основной ветвью является live. Сделаем мы это следующей командой:

git checkout live

Теперь произведем синхронизацию изменений из ветви live оригинального репозитория:

git merge upstream/live

Вместо использования команд fetch и merge по отдельности, мы можем воспользоваться командой pull, что приведет к тому же самому результату.

git pull upstream live

Branch

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

git branch new_branch_name

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

git checkout new_branch_name

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

git branch

Для переименования ветви old_name в new_name команда:

git branch -m old_name new_name

или:

git branch -M old_name new_name

Для удаления ветви branch_name:

git branch -d branch_name

или:

git branch -D branch_name

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

Push

Используется для этого команда push. В качестве аргументов указываются удаленный репозиторий, куда будут передаваться изменения (например, origin) и имя ветви.

В нашем случае команда может выглядеть так:

git push origin live

Что касается имени ветви в вашем репозитории на сайте guthub.com, то оно не обязательно должно соответствовать имени локальной ветви. Например, чтобы передать содержимое ветви localbranch в ветвь remotebranch в вашем репозитории на сайте github.com, используйте следующую команду:

git push origin localbranch:remotebranch

Чтобы удалить ветвь репозитория remotebranch на github.com, используйте команду:

git push origin :remotebranch

Pull request

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

Для этого перейдите на страницу вашего репозитория на сайте github.com, при помощи кнопки Branch: выберите ветвь, содержимое которой вы хотели бы внести в оригинальный репозиторий и нажмите кнопку New pull request.

На открывшейся странице выберите репозиторий и ветвь куда бы вы хотели добавить ваш код (кнопки base fork: и base:), а также, при необходимости, измените репозиторий и ветвь, содержимое которых вы бы хотели предложить для добавления (кнопки head fork: и compare:), введите заголовок и описание вашего запроса и нажмите кнопку Create pull request.


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

2 ответ. на "GitHub: fork, clone и другие"

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s