В чем разница между "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?