Git вилки на самом деле Git клоны?

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

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

Да нет? Есть ли опасения по поводу Github, расширяющего git в этом направлении? Или какие-нибудь слухи о том, что мерзавцы поглощают функциональность?

10 ответов

Решение

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

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

  • клонируйте репозиторий GitHub на свою учетную запись GitHub (это часть "fork", клон на стороне сервера)
  • внести коммиты в это репозиторий GitHub (он находится в вашей собственной учетной записи GitHub, поэтому вы имеете полное право на него)
  • сообщить о любом интересном вкладе в исходное репозиторий GitHub (это часть "запроса на извлечение" посредством изменений, которые вы внесли в свое собственное репозиторий GitHub)

Проверьте также " Совместная работа GitHub ".

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

вилка и вверх по течению

А с 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 с помощью приятного графического интерфейса и стандартизированного способа выдачи запросов на получение, но не добавляет функциональности в Git. Концепция полного репо-форкинга заложена прямо в распределенном контроле версий на фундаментальном уровне. Вы можете отказаться от GitHub в любой момент и при этом продолжать продвигать / извлекать проекты, которые вы "разветвляли".

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

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

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

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

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

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

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

Когда Джон разветвляет SuperProject репо, кажется, что на самом деле все ветки в репо-источнике реплицируются с такими именами, как "John.master", "John.new_gui_project" и т. Д.

Гитхуб "прячет" "Джона". от нас и дает нам иллюзию, что у нас есть своя "копия" репо в Github, но мы этого не делаем и даже не нужны.

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

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

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

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

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

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

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

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

Проще говоря,

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

а также

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

Другие вопросы по тегам