Почему в этом примере используется `git push` без` -u`, а в другом? - PullRequest
0 голосов
/ 12 января 2019

Контроль версий с Git говорит:

Подталкивает, которые используют refspec только с исходным ref (т.е. без пункт назначения) создать новую ветку в удаленном хранилище :

$ cd ~/public_html
$ git checkout -b foo
Switched to a new branch "foo"
$ git push origin foo
Total 0 (delta 0), reused 0 (delta 0)
To /tmp/Depot/public_html
 * [new branch]      foo -> foo

Git Pocket Guide говорит:

Если , вы добавили свою локальную ветку и хотите начать делиться с другими , используйте опцию -u, чтобы Git добавил вашу ветку в удаленный, и настройте отслеживание для вашего местного филиала обычным способом, например:

$ git push -u origin new-branch

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

Какие различия существуют между вещами, которые они пытаются выполнить?

Почему первый не использует -u, а второй -

1 Ответ

0 голосов
/ 12 января 2019

Если ваш вопрос о , что опция -u для git push делает , это дубликат: см. Почему мне нужно "git push --set-upstream origin "? и Как перенести новую локальную ветку в удаленный репозиторий Git и отследить ее тоже? Этот ответ о том, почему книга 2012 года не содержит опцию, которая не была особенно необходимо тогда.


Предполагая, что вы имеете в виду эту конкретную книгу Контроль версий с Git , опубликованную в августе 2012 года , причина, по которой он не предлагает использовать git push -u, заключается в том, что она была опубликована в 2012 году.

Дата выхода Git 2.0:

$ git show v2.0.0
tag v2.0.0
Tagger: Junio C Hamano <gitster@pobox.com>
Date:   Wed May 28 11:04:29 2014 -0700

, что, как вы видите, более позднее, чем 2012. Теперь взгляните на версию 1.7.11:

$ git show v1.7.11
tag v1.7.11
Tagger: Junio C Hamano <gitster@pobox.com>
Date:   Sun Jun 17 14:07:26 2012 -0700

Хотя это 2012 год, в 2012 году уже достаточно поздно, чтобы, вероятно, было уже слишком поздно для книги.

Мне не понятно, к чему относится Git Pocket Reference , но, вероятно, оно было написано или обновлено после выхода Git 2.0.

Почему 2.0 и 1.7.11 актуальны

Git версии 1.7.11 представил новый параметр для push.default с именем simple. При использовании настройки simple Git накладывает новое требование на операции по умолчанию git push: upstream имя ветви, которую вы нажимаете, должно совпадать с local name. То есть, если восходящий поток вашего dev равен origin/develop, git push без refspec, не удастся . Между тем, если есть нет upstream для вашего dev, git push без refspec также завершится неудачей.

(При использовании параметра push.default с именем matching обе эти операции по умолчанию git push будут выполняться до завершения, но вы подтолкнете ваш dev к dev на origin, если он существует, или нет нажмите на dev вообще, если origin не имеет dev.)

Если вы лично оставили push.default неустановленным , параметр обрабатывается как matching в версиях Git, предшествующих 2.0, и как simple в версиях Git 2.0 и выше. Поскольку вся или большая часть книги была написана до выхода Git 1.7.11, вряд ли можно было подумать, как настройка simple повлияет на git push. Так что в ней не упоминается -u опция.

В современных описаниях будет отмечено, что --set-upstream важен, так что будущие git push операции без refspecs будут вести себя так, как вы хотели бы, предполагая, что вы используете Git версии 2.0 или новее и выбрали не по умолчанию push.default , Поэтому они будут вызывать git push --set-upstream origin new-branch, или то же самое с более коротким написанием -u (что означает то же самое в git push).

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