Являются ли вилки Git на самом деле клонами git?

Я продолжаю слышать, как люди говорят, что они разветвляют код в git. Git "fork" звучит подозрительно, как git "clone" плюс некоторая (бессмысленная) психологическая готовность отказаться от будущих слияний. В git нет команды fork, верно?

Github делает вилки немного более реальными, сшивая на него корреспонденцию. То есть вы нажимаете кнопку fork, а позже, когда вы нажимаете кнопку pull request, система достаточно умна, чтобы отправить по электронной почте владельцу. Следовательно, это немного танец вокруг владение РЕПО и разрешения.

Да/Нет? Любая тоска по Github, расширяющей git в этом направлении? Или любые слухи ЖКТ поглощая функциональность?

10 ответов


вилки, в контексте GitHub, не расширяет Git.
Это позволяет только клонировать на стороне сервера.

когда вы клонируете РЕПО GitHub на своей локальной рабочей станции, вы не можете внести свой вклад в восходящее РЕПО, если вы явно не объявлены как "contributor". Это потому, что ваш клон является отдельным экземпляром этого проекта. Если вы хотите внести свой вклад в проект, вы можете использовать раздвоение для этого, в следующем путь:

  • клонировать, что GitHub РЕПО на вашей учетной записи GitHub (это "вилка" часть клон на стороне сервера)
  • contribute совершает это РЕПО GitHub (оно находится в вашей собственной учетной записи GitHub, поэтому вы имеете полное право нажать на него)
  • сигнализируйте о любом интересном вкладе в исходное репозиторий GitHub (это "запрос" часть путем изменений, которые вы сделали на своем собственном GitHub repo)

проверить и "Совместный Рабочий Процесс GitHub".

Если вы хотите сохранить ссылку на исходное РЕПО (также называемое upstream), вам нужно добавить удаленную ссылку на это исходное РЕПО.
См."в чем разница между origin и upstream в github"

fork and upstream

и с Git 2.20 (Q4 2018) и более, извлечение из вилки более эффективно,С Дельта острова.


Я все время слышу, как люди говорят, что они разветвляют код в git. Git "fork" звучит подозрительно, как git "clone" плюс некоторая (бессмысленная) психологическая готовность отказаться от будущих слияний. В git нет команды fork, верно?

Я думаю, у вас есть забавное представление о том, что означает "раздвоение". Это концепция, а не команда, специально поддерживаемая любой системой управления версиями.

самый простой вид разветвления является синонимом ветвления. Каждый раз, когда вы создайте ветвь, независимо от вашего VCS, вы "раздвоили". Эти вилки обычно довольно легко объединить вместе.

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

Git (не GitHub) изначально поддерживает "раздвоение" всего РЕПО (т. е. клонирование его) несколькими способами:

  • когда вы клон, удаленный под названием origin создан для вас
  • по умолчанию все ветви в Клоне будут отслеживать их origin эквивалентах
  • извлечение и слияние изменений из исходного проекта, из которого вы раздвоились, тривиально легко

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

любая тоска по Github, расширяющая git в этом направлении? Или любые слухи ЖКТ поглощая функциональность?

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


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

в будущем, если фактический владелец или другие пользователи с вилкой, как ваши изменения, они могут вернуть его в свое собственное РЕПО. В качестве альтернативы вы можете отправить им "pull-request".


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


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


Я думаю, что fork является копией другого репозитория, но с модификацией вашей учетной записи. например, если вы непосредственно клонируете другой репозиторий локально, источник удаленного объекта по-прежнему использует учетную запись, из которой вы клонируете. Вы не можете зафиксировать и внести свой код. Это просто чистая копия кодов. В противном случае, если вы разветвите репозиторий, он клонирует РЕПО с обновлением настройки вашей учетной записи в вашей учетной записи github. А затем клонирование РЕПО в контексте вашей учетной записи, вы можете зафиксировать коды.


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

git clone-это фактическая команда, которая позволяет пользователям получать копию источника. git клон [URL-адрес] Это должно создать копия [URL] в вашем собственном локальном репозитории.


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

Fork не является командой в git, это просто концепция, которую реализует Github. Помните, что Git был разработан для работы в одноранговой среде без необходимости синхронизации материала с любой главной копией. Сервер - это просто еще один одноранговый узел, но мы рассматриваем его как главную копию.


здесь есть недоразумение относительно того, что такое "вилка". На самом деле вилка-это не что иное, как набор ветвей для каждого пользователя. Когда вы нажимаете на вилку, вы на самом деле нажимаете на исходное РЕПО, потому что это единственное РЕПО.

вы можете попробовать это, нажав на вилку, отметив фиксацию, а затем перейдя к исходному РЕПО и используя идентификатор фиксации, вы увидите, что фиксация находится "в" исходном РЕПО.

Это имеет большой смысл, но далеко не очевидно (Я только недавно обнаружил это случайно).

когда John forks repo SuperProject, кажется, что на самом деле происходит, что все ветви в исходном РЕПО реплицируются с именем "John.Мастер" и "Джон.new_gui_project" и т. д.

Github "скрывает" Иоанна."от нас и дает нам иллюзию, что у нас есть наша собственная "копия" РЕПО в Github, но мы этого не делаем и даже не нужны.

таким образом, ветвь моей вилки " master "на самом деле называется" Korporal.мастер" но пользовательский интерфейс Github никогда не показывает этого, показывая мне только "мастер".

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

по этой причине я думаю, что Microsoft было бы очень легко реализовать вилки Git в их Visual Studio Team services.


В простейшем выражении,

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

и

когда вы говорите, что вы клонирование репозиторий, вы создаете локальную копию исходного репозитория в своей системе(pc/lappy) напрямую, не имея копии в своей учетной записи Github.