В чем разница между Forking и Cloning на GitHub?

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

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

Ответ 1

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

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

Ответ 2

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

Короче:

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

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

Пара других интересных фактов -

Действительно ли git вилки git клоны?

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

Ответ 3

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

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

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

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

Ответ 4

  • Forked project находится в вашем онлайн-репозитории (репо).
  • Клонированный проект находится на вашей локальной машине (я обычно клонирую после разворачивания репо).

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

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

Ответ 5

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

Ответ 6

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

  • fork репо вы хотите отправить запрос на перенос на
  • нажмите локальные изменения на пульте дистанционного управления.
  • запрос на удаление запроса

Ответ 7

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

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

Commit был сделан в fork

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

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

Ответ 8

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

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

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