Зачем мне указывать ветку в командной строке для `git pull`? - PullRequest
0 голосов
/ 28 мая 2018

Я не хочу устанавливать исходный сервер по умолчанию и не хочу устанавливать upstream для ветви.

Для команды push, которую я настроил push.default=current, можно выполнить:

git push origin

Также я хочу иметь возможность запустить:

git pull origin

Но получить ошибку:

You asked to pull from the remote 'origin', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.

Как обойти это сообщение об ошибке?

1 Ответ

0 голосов
/ 28 мая 2018

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

Ответ на почему это так сложен и философичен, и до людей, которые поддерживают Git.Однако, в принципе, мы можем взглянуть на эти факты:

  • В Git глагол push не является противоположностью глагола pull.Что касается противоположностей, то они push и fetch.(Глагол pull означает «получить, затем объединить или перебазировать», более или менее.)

  • Как бы близки они ни были, push и fetch не являютсясимметричны.Когда вы используете git fetch <em>remote</em>, вы вносите коммиты из другого репозитория в свой репозиторий, а затем настраиваете имена для удаленного отслеживания , чтобы указывать на самые передовые из таких коммитов.Другой репозиторий имеет некоторый набор веток B 1 ... B n , и для каждого такого имени в вашем репозитории теперь есть актуальнаяremote/B<sub>i</sub>.

    С другой стороны, поскольку вы устанавливаете push.default на current, когда вы используете git push <em>remote</em>, ваш Git отправляет все необходимые коммиты для вашей текущей ветки C , а затем просит удаленного remote установить его ответвление C , чтобы указать на тот же коммит.Перед C не вставлен квалификатор, например, eugen/, чтобы сделать его уникальным для вас; вы просите, чтобы его Git установил их name C напрямую.

    Даже если вы использовали какую-либо другую настройку push, вы все равно, как правило, просили бы пульт дистанционного управления установить их собственную ветвь.Команда fetch имеет все пространство имен, выделенное для каждого пульта: вы устанавливаете свой refs/remotes/<em>remote</em>/<em>renamed</em>, а не свой refs/heads/<em>name</em>.Команда push заставляет их установить свои refs/heads/<em>name</em>.

Здесь в Git встроено предположение: выборка из множества, push в один. Это предположение недолжны соблюдаться, но доступные синтаксисы и система пространства имен для удаленного отслеживания созданы для его поддержки.Когда вы выходите за пределы этой системы, вы должны использовать несколько неуклюжий синтаксис.Это ваш выбор, как справиться с этим (Git имеет много инструментов).

Если вы выбираете только один и нажимаете на один, вам вообще не понадобятся именованные пульты (зачем беспокоиться о originесли есть только один из них?).Git может даже предположить по умолчанию, что имена ветвлений всегда будут одинаковыми при извлечении и отправке, и выполнять выборку и отправку без необходимости каких-либо восходящих настроек.Конечно, это ограничит вас извлечением push-to-one из одного.

Если Git предполагает выборку из 1078 * от многих, push для многих систем , у него может быть способделай что хочешь.Но это не так (предположим, что это так), поэтому нет (есть способ сделать то, что вы хотите).

...