Git: Fork / Remote / Clone Concepts - PullRequest
       5

Git: Fork / Remote / Clone Concepts

4 голосов
/ 12 ноября 2011

Я пытаюсь понять / визуализировать элементы, которые приходят с разветвлением репо. Моя начальная ссылка - это страница справки .

1-й вопрос :

Когда я раздвоил репо, например Spoon-Knife на GitHub (т.е. нажал кнопку Fork на их сайте), означает ли это, что Spoon-Knife скопирован в мою учетную запись GitHub? Произошла ли настоящая копия или это просто концепция?

2-й вопрос :

Следующим шагом на странице справки является создание клона :

$ git clone git@github.com: имя пользователя / Spoon-Knife.git

Эта команда сделала копию источника на моем локальном компьютере. Клонировался ли он из разветвленного / скопированного репо в моей учетной записи GitHub (см. Мой первый вопрос)? Или из оригинального Ложка-нож репо?

3-ий вопрос :

Шаг о настройке пультов:

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

Итак, origin является неким "прокси" между нашей локальной копией и репо на моей учетной записи GitHub? А как насчет upstream?

Заранее спасибо за помощь.

Ответы [ 6 ]

4 голосов
/ 12 ноября 2011

Необходимо различать понятия fork и клон .

  • клон - это концепция Gitэто существовало до GitHub: когда вы клонируете репозиторий, вы копируете всю историю и данные в нем в свой только что созданный репозиторий.Кроме того, remote автоматически создается в новом хранилище, которое называется origin , которое указывает на хранилище, из которого вы клонировали.

  • fork - это концепция GitHub, о которой ядро ​​Git не знает.Когда вы разветвляете проект GitHub, вы создаете свой собственный проект GitHub, который идентичен исходному, со всеми автоматически обновленными функциями GitHub, такими как график разветвления.За кулисами в форк также входит клонирование Git-репозитория в исходном проекте и создание нового Git-репозитория в только что созданном вами проекте.

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

4 голосов
/ 12 ноября 2011
  1. Все, что вы делаете, когда вы «разветвляетесь», - это эффективно создаете ветку в их репозитории git, в которую вы можете зарегистрироваться.

  2. Ваша локальная копия, к которой вы клонируете, только что клонирована и связана с веткой, созданной вами на git-hub. Помните, что ветвь - это просто указатель на объект фиксации, поэтому, когда вы «разветвляетесь», вы просто добавляете название ветки в их репо, которое указывает на текущую голову их мастера.

  3. Remotes в git - это просто имена репозиториев по внешнему адресу. По умолчанию ваш «origin» настроен git и является просто именованным удаленным. «upstream» - это просто другое имя, указывающее на оригинального мастера, от которого вы изначально разветвились, чтобы вы могли перенести изменения между мастером и вашей собственной веткой. Вы можете видеть свои пульты с помощью git remote -v и легко добавлять их, чтобы отслеживать любую ветку в любом внешне доступном git-репо.

2 голосов
/ 12 ноября 2011

1-й вопрос:

Вы скопировали его.На самом деле это своего рода клон.Теперь у вас есть копия проекта (фактически одной из его веток) в вашей учетной записи на github.

2-й вопрос:

Команда git clone клонирует репозиторий, который вы ему предоставили.Итак, $ git clone git@github.com:username/Spoon-Knife.git клон Spoon-Knife из username репо.Если это ваша учетная запись, значит, это копия вашей копии репо Spoon-Knife:)

3-й вопрос:

origin - это не прокси, это просто имя для другого репо,Например, следующая команда добавляет репозиторий с именем local_srv:

git remote add local_srv /path/to/local/srv

upstream - это просто еще один пульт.Вы можете настроить его для извлечения из него (т.е. получать обновления).

В вашем случае origin является вашим репозиторием на github (я называю удаленным github), и вы можете добавить upstream удаленное к исходномуЛожка-Нож.Таким образом, вы работаете в локальном проекте, нажимаете на свою учетную запись github (например, git push origin master) и получаете новые обновления проекта Spoon-Knife, используя git pull upstream master.

Примечание. Здесь я использовал только master, ноВы можете заменить его на понравившуюся вам ветку.

1 голос
/ 25 июля 2012

3 репо

original - {GitHub}/octocat/Spoon-Knife  
forked   - {GitHub}/   mine/Spoon-Knife  
local    -  {local}        /Spoon-Knife
  1. Когда вы «разветвляетесь», у вас есть фактическая копия в том смысле, что вы имеете доступ к ней для чтения / записи. Тем не менее, это может быть лучше всего рассматривать как способ эффективно "создать ветку в исходном git-репозитории, в которую вы можете писать".

  2. Действие "fork" скопировало original в вашу учетную запись GitHub. Вы можете напрямую нажать от local клон до forked (НЕ original).

  3. Проще говоря, remote - это имя хранилища по внешнему адресу.
    «origin» - указывает на forked («origin» является именем по умолчанию remote name)
    «upstream» - указывает на original, чтобы вы могли получать изменения в своих репозиториях

Вы можете видеть свои пульты с помощью git remote -v и легко добавлять их для отслеживания любой ветви в любом внешне доступном git-репо.

Частично получено из ответа Марка.

1 голос
/ 12 ноября 2011

С помощью git каждый репозиторий получает полную историю.Фактически (за исключением некоторой оптимизации с разделением данных между локальным репозиторием), каждый репозиторий является клоном другого репозитория.Или в git hub говорят вилка (это одно и то же).

Итак, у вас есть три репозитория: исходный репозиторий разработчика, клон на git hub (они называют его форком) и локальный клонэтот клон.Имя origin - это просто сокращенное имя для ссылки на ваш репозиторий в git hub (ваш первый клон).Без этого сокращения вы должны будете указывать полный URI для хранилища на каждом шаге.

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

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

1 голос
/ 12 ноября 2011

Когда я раздвоил репо, например, Spoon-Knife на GitHub, означает ли это, что Spoon-Knife скопирован в мою учетную запись GitHub?

Да.

Реальная копия действительно произошла или это просто концепция?

Это деталь реализации на конце Github. Не должно иметь значения для вас. (Я почти уверен, что они разделяют хранилище).

Клонировался ли он из разветвленного / скопированного репо в моей учетной записи GitHub? Или из оригинального репо Spoon-Knife

Поскольку вы указали его в репо своей учетной записи, он скопирует его оттуда. Однако на этом этапе содержимое двух вилок идентично.

Итак, является ли origin неким "прокси" между нашей локальной копией и репо на моей учетной записи GitHub? А как насчет апстрима?

Не совсем. «origin» - это просто идентификатор репо на GitHub, чтобы вам было легче с ним общаться. «вверх по течению» будет работать так же. Вам не нужно настраивать эти пульты, но их использование для всех репозиториев, с которыми вы часто работаете (push или pull изменения), облегчает вам задачу. Имена «origin» и «upstream» также являются просто условностями (с вами следует следовать), для них нет «волшебства».

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