В чем разница между "origin" и 'remote' в командах git?

В git lingo есть origin и remote то же самое? Или origin ссылается на локальный каталог?

В случае git push -u origin master: Какая из следующих интерпретаций верна?

  • "нажмите все вверх по течению до удаленного репо, названного" происхождение "и его" хозяин "ветки.
  • "выталкивает все из локального репо, называемого" происхождение ", в ветвь" ведущий "вверх по течению

Оцените любое разъяснение!

Ответы на мой вопрос уточнили для меня два вопроса:

  • origin относится к удаленному репо, а не к локальной клонированной копии удаленного репо. Это неясно, когда читаешь, что origin является псевдонимом remote и создается во время git clone
  • origin относится к удаленному репо в git push -u origin master, потому что локальные копии репо подразумеваются и "редко ссылаются".

Ответ 1

В git lingo origin - это просто имя по умолчанию для удаленного, с которого первоначально было клонировано репо. Его также можно было бы назвать source или remote1 или просто remote.

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

Все пульты равны. origin является просто (и буквально) первым среди равных (для клонированного репо).:)

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

Что касается ваших интерпретаций оператора push, то ваш первый является самым близким к правилу, но команда push, как написано, подталкивает локальную ветвь master к ветке master на удаленном, идентифицированном (локально настроено) name origin.

Если на пульте нет ветки master, тогда будет создан.

Полная информация о команде push и флаге, параметрах и т.д., конечно же, содержится в документах.

Вы редко (если вообще когда-либо) ссылаетесь на "локальное" репо явно, так как ваши операции выполняются в контексте репо.

Ответ 2

У вас может быть несколько пультов, каждое с другим именем - например, по умолчанию "origin"

В вашем вопросе делается предположение, что у вас в настоящее время проверена главная ветка.

git push -u origin master

Нажмите локальную ветвь с именем master на пульт "origin", как ветвь с именем master. Флаг -u сообщает локальному git отслеживать удаленную ветку как вверх по течению к вашей локальной ветке.

Ответ 3

Нет, они не означают одно и то же.

remote, в git -speak относится к любому удаленному репозиторию, например к вашему GitHub или другому серверу git.

origin является стандартным удаленным именем по умолчанию в git. Когда вы делаете git clone <url>, <url> автоматически добавляется к вашему местному репо под именем origin. Разумеется, вы можете добавить другие пульты под разными именами, используя git remote add.

Когда вы выполняете git push -u origin master, это означает, что "отталкивает все от моего локального мастера до удаленного с именем origin". Структура этой команды, конечно, более общая - более общая форма git push -u <remote> <branch>, которая будет нажимать ветвь с именем branch на назначенный пульт, создавая ее в дальнем конце, если пульт дистанционного управления еще не имеет он (что делает флаг -u).

В качестве дополнительного добавления git push по умолчанию будет нажимать текущую ветвь на origin, соответствующую git push origin <current-branch>.

Ответ 4

Пульт - это просто слово: имя, которое нужно использовать для определения какого-то другого репозитория Git.

Строка origin - это имя по умолчанию (единственного) удаленного, которое git clone помещается автоматически, когда вы клонируете какой-либо другой ( "origin" -al) Git репозиторий. Вы можете выбрать другое имя и/или добавить больше пультов. Каждый пульт имеет, по крайней мере, URL-адрес, в котором находится другой репозиторий.

Для git push, третье слово - при необходимости отрегулируйте это число, если вы добавляете различные флаги; в этом случае вы добавили -u, так что теперь это четвертое слово - обычно это имя какого-то удаленного.

Остальные слова - это все refspecs, которые можно суммировать (хотя и не на 100% точно... на самом деле, менее 50% точно, в зависимости от того, как вы считаете:-)) как пару имен ветвей, разделенных толстой кишки.

Если вы пишете только одно имя ветки, например master, Git, это означает "использовать (часть) восходящего потока, если он установлен, иначе используйте одно и то же имя после двоеточия". Обычно восходящее, если установлено, имеет одно и то же основное имя, поэтому master обычно заканчивается значением master:master. Git отправляет их - Git в удаленных URL-коммитах, найденных в вашей ветке (имя слева), а затем просит их установить свою ветку (имя справа) на тот же кончик, что и вы нажата для этой ветки.

Если вы не введете какие-либо refspecs, Git по умолчанию зависит от вашей версии Git. Начиная с Git версии 2.0, по умолчанию используется толкание текущей ветки на ветку с таким же именем на пульте дистанционного управления.

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

В начало ветки входит две части: имя удаленного и имя ветки на этом удаленном компьютере. Поскольку вы дали git push оба элемента - имя пульта было origin, а ветка была второй (после двоеточия) master из подразумеваемого master:master из master - это будет, если это удастся, установите восходящий поток для master в origin/master.

(Изменить): вы можете вполне законно задаться вопросом, откуда появился / в исходной настройке origin/master. Это частично исторический артефакт. К сожалению, это приводит к огромному количеству путаница. На данный момент просто имейте в виду, что ветвь удаленного, ветки и удаленного отслеживания - это все разные вещи в Git. Все они связаны по-разному, но важно помнить, что они не совпадают, и термины имеют очень специфические значения. Трек слова также перегружен. Новый термин вверх по течению лучше, но не все описания его используют.)

Ответ 5

Нет, remote является родительской структурой origin. Это просто имя по умолчанию remote Git создается при клонировании репозитория.

Дополнительная информация в этом вопросе: Что такое "происхождение" в Git?