Я продолжаю слышать, как люди говорят, что они раздувают код в Git. Git "fork" звучит подозрительно, как Git "clone" плюс некоторая (бессмысленная) психологическая готовность отказаться от будущих слияний. В Git нет команды fork, верно?
GitHub делает вилки немного более реальными, накладывая на них корреспонденцию. То есть, вы нажимаете кнопку вилки, а затем, когда вы нажимаете кнопку запроса на извлечение, система достаточно умна, чтобы отправить электронное письмо владельцу. Следовательно, это немного танец вокруг владения хранилищем и разрешений.
Да нет? Есть опасения, что GitHub расширяет Git в этом направлении? Или какие-нибудь слухи о поглощении Git функциональности?
--reference
крестиком. Как именно обрабатываются публичные репо и удаления, не совсем понятно (переместить альтернативы в произвольно выбранные продвигаемые репо - указать все вилки на какой-нибудь общий альтернативный вариант, не являющийся частью исходного форка?), Но использование альтернатив объясняет различные наблюдаемые варианты поведения.Ответы:
В контексте GitHub Fork не расширяет Git.
Это позволяет только клонировать на стороне сервера.
Когда вы клонируете репозиторий GitHub на своей локальной рабочей станции, вы не можете внести свой вклад обратно в вышестоящий репозиторий, если вы явно не объявлены как «участник». Это потому, что ваш клон является отдельным экземпляром этого проекта. Если вы хотите внести свой вклад в проект, вы можете использовать разветвление для этого следующим образом:
Проверьте также « Совместная работа GitHub ».
Если вы хотите сохранить ссылку на исходный репозиторий (также называемый апстрим), вам нужно добавить удаленную ссылку на этот оригинальный репозиторий.
Смотрите "В чем разница между источником и апстримом на GitHub? "
А с Git 2.20 (Q4 2018) и более, выборка с вилки более эффективна, с дельта-островами .
источник
«Форкинг» - это концепция, а не команда, специально поддерживаемая любой системой контроля версий.
Самый простой вид разветвления является синонимом ветвления. Каждый раз, когда вы создаете ветку, независимо от вашей VCS, вы «разветвляетесь». Эти вилки обычно довольно легко объединить.
Разветвление, о котором вы говорите, когда отдельная сторона берет полную копию кода и уходит, обязательно происходит за пределами VCS в централизованной системе, такой как Subversion. Распределенная VCS, такая как Git, имеет гораздо лучшую поддержку для разветвления всей кодовой базы и эффективного запуска нового проекта.
Git (не GitHub) изначально поддерживает «разветвление» всего репо (т.е. его клонирование) несколькими способами:
origin
для вас создается удаленный вызываемыйorigin
эквивалентыGit делает внесение изменений обратно в источник ветвления таким же простым, как просьба кого-то из первоначального проекта отозвать у вас или запрос на доступ для записи, чтобы отодвинуть изменения обратно самостоятельно. Это та часть, которую GitHub упрощает и стандартизирует.
Там нет страха, потому что ваше предположение неверно. GitHub «расширяет» функциональность разветвления Git с помощью приятного графического интерфейса и стандартизированного способа выдачи запросов извлечения, но не добавляет функциональности в Git. Концепция полного репо-форкинг заложена прямо в распределенном контроле версий на фундаментальном уровне. Вы можете отказаться от GitHub в любой момент и при этом продолжать продвигать / извлекать проекты, которые вы «разветвляли».
источник
X project
на моей машине. Если я внесу изменения в свой локальный сайт и не имею права на запись в источник, я напишу автору проекта письмо с просьбой о проведении проверки. Он сделает пульт под названием Гидеон, который будет URL моего локального клона, и он может тянуть, верно?Да, вилка - это клон. Это произошло потому, что вы не можете нажимать на копии других без их разрешения . Они делают копию для вас ( форк ), где у вас также будет разрешение на запись.
В будущем, если фактический владелец или другие пользователи с вилкой, как ваши изменения, они могут вернуть его в свой собственный репозиторий. В качестве альтернативы вы можете отправить им «pull-request».
источник
fork
означает, что на вашем сервере GitHub есть копия вашей работы, к которой вы можетеpush
обращаться, и к которой другие имеют доступ по URL, чтобы они моглиpull
. Этоpull request
просто стандартный способ получения URL-адреса вашей копии (на GitHub), чтобы они могли легко перенести его в свой репозиторий.«Форк» в данном контексте означает «Сделайте копию своего кода, чтобы я мог добавлять свои собственные модификации». Больше нечего сказать. Каждый клон - это, по сути, вилка, и исходное решение решать, следует ли извлекать изменения из вилки.
источник
on the GitHub server
чтобы я мог добавлять свои собственные модификацииand others can have URL access to my version
». Большинство локальных рабочих станций не предоставляют доступ к URL-адресам для тех, кто может их использовать. Но если вы нажмете на свою вилку на сервере, тогда у них может быть URL для получения.Клонирование включает создание копии репозитория git на локальном компьютере, а разветвление - клонирование репозитория в другой репозиторий. Клонирование предназначено только для личного использования (хотя в будущем могут произойти слияния), но с разветвлением вы копируете и открываете новый возможный путь проекта
источник
Форкинг делается, когда вы решили внести свой вклад в какой-то проект. Вы сделаете копию всего проекта вместе с его журналами истории. Эта копия полностью создается в вашем хранилище, и после внесения этих изменений вы отправляете запрос на извлечение. Теперь владелец исходного кода может принять ваш запрос и включить изменения в исходный код.
Git clone - это настоящая команда, которая позволяет пользователям получить копию исходного кода. git clone [URL] Это должно создать копию [URL] в вашем локальном хранилище.
источник
Я думаю, что fork - это копия другого репозитория, но с изменениями вашего аккаунта. например, если вы напрямую клонируете другой репозиторий локально, источник удаленного объекта все еще использует учетную запись, от которой вы клонируете. Вы не можете зафиксировать и внести свой код. Это просто чистая копия кодов. В противном случае, если вы разветвите репозиторий, он клонирует репо с обновлением настроек вашей учетной записи в вашей учетной записи github. И затем клонируя репо в контексте вашей учетной записи, вы можете зафиксировать свои коды.
источник
Здесь есть недоразумение относительно того, что такое «вилка». На самом деле, ответвление - это не что иное, как набор веток для каждого пользователя. Когда вы нажимаете на разветвление, вы действительно продвигаетесь в исходное хранилище, потому что это ЕДИНСТВЕННОЕ хранилище.
Вы можете попробовать это, нажав на форк, отметив коммит, а затем перейдя в исходный репозиторий и используя идентификатор коммита, вы увидите, что коммит находится «в» исходном репозитории.
Это имеет большой смысл, но это далеко не очевидно (я обнаружил это только недавно).
Когда Джон разветвляет репозиторий SuperProject, кажется, что на самом деле все ветки в исходном репозитории реплицируются с такими именами, как «John.master», «John.new_gui_project» и т. Д.
GitHub «прячет» «Джона». от нас и дает нам иллюзию, что у нас есть своя собственная «копия» хранилища на GitHub, но мы этого не делаем, и даже не нужен.
Так что ветвь моей ветки "master" на самом деле называется "Korporal.master", но пользовательский интерфейс GitHub никогда не раскрывает это, показывая мне только "master".
Это в значительной степени то, что я думаю, все равно происходит под капотом, основываясь на материалах, которые я делал недавно, и, когда вы обдумываете это, это очень хороший дизайн.
По этой причине я думаю, что для Microsoft было бы очень легко внедрить вилки Git в свои предложения Visual Studio Team Services.
источник
git clone
целый новый репозиторий (даже «пустой») каждый раз, когда кто-то нажимает кнопку «fork» - это было бы невероятной тратой памяти и, вероятно, вектором атаки. ,Помимо того, что клонирование происходит с сервера на ваш компьютер, а разветвление делает копию на самом сервере, важное отличие состоит в том, что когда мы клонируем, мы фактически получаем все ветви, метки и т. Д.
Но когда мы разветвляемся, мы на самом деле получаем только текущие файлы в основной ветке, ничего кроме этого. Это означает, что мы не получаем другие ветви и т. Д.
Следовательно, если вам нужно слить что-то обратно в исходный репозиторий, это слияние между репозиториями и определенно потребует более высоких привилегий.
Форк не является командой в Git; это просто концепция, которую реализует GitHub. Помните, что Git был разработан для работы в одноранговой среде без необходимости синхронизировать материал с какой-либо мастер-копией. Сервер - это просто еще один узел, но мы рассматриваем его как мастер-копию.
источник
git branch -a
).Проще говоря,
Когда вы говорите, что разветвляете хранилище, вы в основном создаете копию исходного хранилища под своим идентификатором GitHub в своей учетной записи GitHub.
а также
Когда вы говорите, что клонируете репозиторий, вы создаете локальную копию исходного репозитория в своей системе (ПК / ноутбук) напрямую, не имея копии в своей учетной записи GitHub.
источник