Разрешение git push origin с помощью remote.repository.push - PullRequest
0 голосов
/ 18 сентября 2018

Теперь с помощью git push docs ,

Если git push [<repository>] без какого-либо аргумента <refspec> установлен для обновления некоторого ref в пункте назначения с <src> с remote.<repository>.push переменная конфигурации, :<dst> часть может быть опущена - такой толчок обновит ссылку, которая обычно обновляется <src> без каких-либо <refspec> в командной строке.В противном случае пропущенный :<dst> означает обновление той же ссылки, что и <src>.

. У меня проблемы с пониманием.

Я понял так:

Он сверится со значением remote.origin.push и попытается определить refspec.

Но что это значит ..​such a push will update a ref that <src> normally updates without any <refspec> on the command line.Otherwise, missing :<dst> means to update the same ref as the <src>?

Может ли кто-нибудь привести пример remote.origin.push, а затем объяснить, к чему относится этот пункт(из git doc, как выделено выше) действительно значит сказать?

Edit : я понимаю, как будет вести себя git push origin, но я не могу связать это с тем, что хочет git docсказать нам по пункту выше.

1 Ответ

0 голосов
/ 20 сентября 2018

Для git push существует много значений по умолчанию.Давайте начнем с четкого разделения различных частей синтаксиса.Синтаксис, сокращенно обозначенный интересующими вас частями, выглядит следующим образом:

git push [<em>options</em>] [<em>repository</em> [<em>refspec</em> ...]]

Аргумент repository обычно является именем удаленного, например origin, но может быть URL.Если в командной строке не указан аргумент repository, то нельзя указать ни refspec: для параметров добавляется тире, а для не с префиксом, начинающимся с тире, первое слово (разбитое на элементы argv, независимо от того, что вызывает скомпилированные C-программы в рассматриваемой системе) - это хранилище, а дополнительные слова - это refspecs.Тем не менее, определенно возможно дать хранилище без указания refspec.Например, git push не хватает обоих, в то время как git push origin имеет репозиторий, но не хватает refspec.

Здесь нас интересует случай, когда refspec не в команделиния.Тем не менее, он работает так же, как когда refspec равен в командной строке - просто места, которые Git смотрит, чтобы найти некоторые refspec или refspecs, можно установить вconfiguration.

Допустим, что в командной строке указан репозиторий origin, т. е. вы запустили git push origin.Git, как вы сказали, проверит вашу конфигурацию, чтобы увидеть, есть ли у вас настройка remote.origin.push.Скажем далее, что изначально:

git config --get remote.origin.push

печатает строку develop:benjamin_develop.

Это refspec, который имеет как <src>, так и :<dst> части, поэтому Git рассматривает его какdevelop:benjamin_develop.

Теперь предположим, что вы запустили:

git config remote.origin.push develop

, т.е. уберите часть :benjamin_develop настройки.Затем вы снова запускаете git push origin.Теперь подразумеваемое refspec просто develop: в нем отсутствует :<dst> часть.

Приведенный вами абзац довольно запутанный (он меня смутил), но после экспериментов - см. Комментарии ниже - мы обнаружили, что ондействует так же, как:

git push origin develop

в командной строке, которая действует так же, как:

git push origin develop:develop

, т. е. часть :<dst> точно такая же, как :<src>часть, независимо от текущей настройки push.default.

(я думаю, что документация здесь может быть более ясной. Основная проблема заключается в том, что поведение Git сильно изменилось и со временем изменилось. Настройка remote.<remote>.push несуществуют в более старых версиях Git, поэтому в какой-то момент, когда он был добавлен, кто-то должен был добавить соответствующий параграф в документацию. На данный момент документация в целом может быть реорганизована для устранения избыточности, но никто не сделалчто.)

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