Это нормально?
"Нормально" - это смешное слово.Трудно определить, является ли это нормальным .Немного необычно иметь один пульт и не иметь его с именем origin
, но это не ошибка , это просто нечетный .
Что произойдет, если есть 2 или более пультов?
Это зависит от вас.git remote -v
перечислит их все, так что, конечно, их можно извлечь таким образом.Вы также можете использовать:
git config --get-regexp 'remote\..*'
, чтобы перечислить их все.Возможно, вы даже захотите добавить --local
, чтобы убедиться, что в списке указаны только пульты, определенные в локальном файле .git/config
, в случае, если какой-то сумасшедший пользователь определил пульт в своей глобальной конфигурации.(Я предполагаю, что вы не хотите пытаться обновить какие-либо такие записи.)
Также обратите внимание, что каждый пульт может определять как URL, так и push URL .Эти имена конфигурации не чувствительны к регистру, поэтому вы должны сворачивать регистр при поиске любых remote.<em>remote</em>.url
и remote.<em>remote</em>.pushurl
настроек «вручную» (если вы пишете свой собственный код для чтения файла config
), но вы этого не делаетеВам нужно беспокоиться об этом при использовании git config --get-regexp
или git remote -v
, так как они делают сгибание регистра для вас.
Следовательно, скрипт sh или bash для чтения вывода git config --get-regexp
может использовать:
# fix - called with URLs that may need fixing. Argument $1 is the
# type (url or pushurl), argument $2 is the remote, $3 is the URL itself.
fix() {
local urltype=$1 remote="$2" url="$3"
local newurl
case $3 in
...) newurl="echo $url | sed ...";;
*) return;;
esac
git config "remote.$remote.$urltype" "$newurl"
}
git config --local --get-regexp 'remote\..*' | sort | while read -r lhs rhs; do
set -- $(echo $lhs | sed 's/\./ /g')
case $3 in
url|pushurl) fix $3 "$2" "$rhs";;
esac
done
(В bash можно быть немного более любопытным; все вышеперечисленное работает в POSIX sh, хотя все это довольно непроверено. Конечно, вам также необходимо заполнить части ...
.)
Как правило, в удаленных именах и URL-адресах не должно быть пробелов.Я использовал кавычки выше для обработки случаев, когда они могут.(Команда git remote
не позволяет вам добавить пульт с пустым именем, но допускает пустое пространство в URL.) Очевидно, бесполезное использование «сортировки» - для обработки крайних случаев: если .git/config
файл очень большой, мы можем попытаться запустить git config
на изменить конфигурацию, пока git config --get-regexp
все еще читает и печатает старую конфигурацию.На практике это, вероятно, не нужно.