В чем разница между форкингом и клонированием на GitHub? - PullRequest
167 голосов
/ 14 августа 2011

Я хотел бы знать разницу между выполнением Fork проекта и выполнением clone.

Могу ли я отправлять пул-запросы только через GitHub, если я разбудил проект?

Ответы [ 9 ]

126 голосов
/ 19 ноября 2013

Когда вы говорите, что вы Форкируете хранилище, вы в основном создаете копию хранилища под своим идентификатором GitHub. Здесь необходимо отметить, что любые изменения, внесенные в исходный репозиторий, будут отражены обратно в ваши разветвленные репозитории (вам нужно получить и перебазировать). Однако, если вы внесете какие-либо изменения в ваш разветвленный репозиторий , вам придется явно создать запрос на извлечение в оригинальный репозиторий. Если ваш запрос на получение одобрения одобрен администратором исходного репозитория , то ваши изменения будут зафиксированы / объединены с существующей оригинальной базой кода. До тех пор ваши изменения будут отражены только в копии, которую вы разветвили .

Короче говоря:

Модель Fork & Pull позволяет любому разветвить существующий репозиторий и вносить изменения в свой личный форк, не требуя предоставления доступа к исходному репозиторию. Затем изменения должны быть перенесены в исходный репозиторий сопровождающим проекта.

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

Пара других интересных рассуждений -

Действительно ли git-вилки являются git-клонами?

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

104 голосов
/ 14 августа 2011

В основном да. A fork - это просто запрос GitHub клонировать проект и зарегистрировать его под своим именем пользователя ; GitHub также отслеживает отношения между двумя репозиториями, поэтому вы можете визуализировать коммиты и пуллы между двумя проектами (и другими форками).

Вы по-прежнему можете просить людей извлечь из вашего клонированного репозитория, даже если вы не используете fork - но вам придется иметь дело с тем, чтобы сделать его общедоступным самостоятельно. Или отправьте разработчикам исправления (см. git format-patch), чтобы они могли применить их к своим деревьям.

24 голосов
/ 01 мая 2015
  • Разбитый проект находится в вашем онлайн-хранилище (репо).
  • Клонированный проект находится на вашем локальном компьютере (я обычно клонирую после разветвления репо).

Вы можете зафиксировать свое онлайн-репо (или зафиксировать в своем локальном репо, а затем нажатьваше онлайн-репо), затем отправьте запрос на извлечение.

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

14 голосов
/ 14 августа 2011

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

Когда вы разветвляете репо на сервере, нет необходимости дублировать контент, потому что оба репо будут использовать один и тот же контент [фиксированный объект] с того же сервера.«Хитрость» заключается в управлении различными пользовательскими точками зрения, так что каждый пользователь считает, что у него есть полная личная копия репо.Нажатие и выборка между вилками просто обновляет указатели пользователя.

На более низком уровне git делает то же самое внутри.Если у вас есть три разных файла, каждый из которых содержит Hello World, то git просто «разветвляет» свою единственную копию блоба Hello World и предлагает ее в каждом из трех мест по мере необходимости.

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

6 голосов
/ 24 ноября 2015

Короче говоря, Forking - это, пожалуй, то же самое, что "клонирование под вашим идентификатором / профилем GitHub".Вилка всегда лучше, чем клон, за некоторыми исключениями, очевидно.Разветвленный репозиторий всегда отслеживается / сравнивается с исходным репозиторием, в отличие от клонированного репозитория.Это позволяет вам отслеживать изменения, инициировать запросы извлечения, а также вручную синхронизировать изменения, сделанные в исходном репозитории, с вашим разветвленным.

3 голосов
/ 29 октября 2017

Хотя ответ @ AniketThakur очень хороший. Никто еще не ответил на следующий вопрос.

Могу ли я отправлять пул-запросы только через GitHub, если я разбудил проект?

Нет. Если вы являетесь участником репозитория, вы можете: Сделать локальный клон. Сделать местный филиал. Добавить коммиты в эту ветку. Переместите локальную ветку обратно в github (создавая удаленную ветку в процессе). Сделайте запрос на удаление, запрашивающий объединение этой ветви с основной веткой (или любой другой веткой, которая вам нравится).

3 голосов
/ 15 июня 2017

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

От Почему мои вклады не отображаются :

Коммит был сделан в вилке

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

Откройте запрос на извлечение , чтобы внести ваши изменения в родительский репозиторий. Чтобы отсоединить вилку и превратить ее в автономный репозиторий на GitHub, обратитесь в службу поддержки GitHub . Если вилка имеет свои собственные вилки, сообщите в службу поддержки, должны ли вилки перемещаться вместе с вашим репозиторием в новую сеть или оставаться в текущей сети. Для получения дополнительной информации см. « О вилках

3 голосов
/ 19 апреля 2016

Если вы сделали то, на что намекал спрашивающий (забыл раскошелиться и просто локально клонировал репо, внесли изменения и теперь нужно выполнить запрос на извлечение), вы можете вернуться на правильный путь:

  1. разветвите репо, которое вы хотите отправить по запросу, на
  2. отправьте локальные изменения на ваш удаленный
  3. запрос на выдачу запроса
2 голосов
/ 19 марта 2019

В двух словах «fork» создает копию проекта, размещенного на вашей собственной учетной записи GitHub.

«Клон» использует на своем компьютере программное обеспечение git для загрузки исходного кода и всей истории версий.компьютер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...