# git version 2.22.0.windows.1
# create simulation repos
git init --bare server
git init client
# set global and local config
git config --global remote.origin.push refs/heads/*:refs/for/*
cd client
git remote add origin ../server
git config remote.origin.push refs/heads/*:refs/heads/*
# create and push "master"
touch a.txt
git add a.txt
git commit -m foo
git push origin master
Ожидается, что локальный refspec refs/heads/master:refs/heads/master
будет работать.Однако вместо этого создается refs/for/master
.Я удаляю refs/for/master
и пытаюсь с -c
:
git push origin :refs/for/master
git -c remote.origin.push=refs/heads/*:refs/heads/* push origin master
Снова refs/for/master
создается вместо refs/heads/master
.
Я удаляю remote.origin.push
в глобальной конфигурации и пытаюсьснова, а затем refs/heads/master
создается как ожидалось.А также я делаю эти тесты.
global refs/heads/*:refs/for/*
local refs/heads/*:refs/hello/*
result refs/for/master
global refs/heads/*:refs/hello/*
local refs/heads/*:refs/for/*
result refs/hello/master
global refs/heads/*:refs/for/*
local unset
result refs/for/master
global unset
local refs/heads/*:refs/hello/*
result refs/hello/master
Я даже добавляю push refspec в системную конфигурацию, что также приводит к неожиданному результату.
system refs/heads/*:refs/world/*
global refs/heads/*:refs/hello/*
local refs/heads/*:refs/heads/*
result refs/world/master
И тест user.name
,
system systemname
global globalname
local localname
result localname
Оказывается, что для remote.origin.push
порядок приоритетов обратный по сравнению с другими переменными конфигурации.
Я совершенно сбит с толку, поскольку он не работает, как я полагал.Это ошибка или я пропустил какую-то тонкую особенность git config?