Двусмысленные имена с GIT?
Я пытаюсь проверить один из моих местных отделений, названный TEAM20-lab2-release. Когда я пытаюсь сделать это, я получаю неоднозначную ошибку refname:
$ git branch TEAM20-lab2-release
warning: refname 'TEAM20-lab1-release' is ambiguous.
fatal: Ambiguous object name: 'TEAM20-lab1-release'.
Вот список моих веток:
$ git branch -a
TEAM20-lab1
* TEAM20-lab1-release
master
remotes/origin/HEAD -> origin/master
remotes/origin/master
3 ответа
Обычно это происходит из-за того, что у вас то же имя (чем у вашей ветви), используемое в другом пространстве имен:
- как пространство имен " remotes ": имя удаленного репозитория, как показано в этом вопросе SO.
(Отсюда просьба Давитенио оgit branch -a
в комментариях) - или "пространство имен тегов ": наличие тега, названного в честь ветви, также может вызвать это сообщение (см. этот пост в блоге)
Обновление 2016: Git 2.12 (Q1 2017) не будет отображать никаких ошибок, если ветвь и тег имеют одно и то же имя.
Смотрите коммит b284495 (31 октября 2016 г.) от Денниса Каарсемакера ( seveas
)
Смотрите коммит eef2bda (28 октября 2016 г.) от Junio C Hamano ( gitster
)
(Объединено Юнио С Хамано - gitster
- в коммите 6c18dd4, 27 декабря 2016 г.)
push
: не используйте потенциально неоднозначный по умолчанию refspecКогда пользователь ленится
git push
"без параметров сpush.default
установить либоupstream
","simple
" или же "current
msgstr "мы внутренне сгенерировали refspec с текущим именем ветви на стороне источника и использовали его для отправки.Тем не менее, название ветви (скажем,
test
") может быть неоднозначным refname в контексте исходного репозитория - может быть тег с таким же именем, например.
Это вызвало бы ненужную ошибку без какой-либо ошибки на стороне конечного пользователя.Будьте явными и дайте полное refname как исходную сторону, чтобы избежать двусмысленности.
Сторона назначения при нажатии с "current
"отправил только название ветки и заставил получающий конец угадать, что является той же проблемой.
Будь явным там же.
Чтобы вы начали искать неоднозначные ссылки
function branchid()
{
echo $(basename "$(dirname "$1")")/$(basename "$1");
}
for ref in $(git for-each-ref | cut -f2)
do echo -e "$ref\t$(branchid "$ref")"
done |
sort --key 2 | uniq -Df 2
Я получил то же сообщение об ошибке при попытке установить восходящую ветку для локальной ветки.
cgd@flavia-cgd-mobi:~/Projects/reporter$ git status
On branch master
nothing to commit, working directory clean
cgd@flavia-cgd-mobi:~/Projects/reporter$ git branch --set-upstream-to gerrit/master master
warning: refname 'gerrit/master' is ambiguous.
fatal: Ambiguous object name: 'gerrit/master'.
cgd@flavia-cgd-mobi:~/Projects/reporter$ git remote -vv
gerrit ssh://cgd@gerrit.server:29418/reporter (fetch)
gerrit ssh://cgd@gerrit.server:29418/reporter (push)
cgd@flavia-cgd-mobi:~/Projects/reporter$ git branch -a
gerrit/master
* master
remotes/gerrit/master
cgd@flavia-cgd-mobi:~/Projects/reporter$ git branch -d gerrit/master
Deleted branch gerrit/master (was 1234567).
cgd@flavia-cgd-mobi:~/Projects/reporter$ git branch --set-upstream-to gerrit/master master
Branch master set up to track remote branch master from gerrit.
cgd@flavia-cgd-mobi:~/Projects/reporter$ git fetch
cgd@flavia-cgd-mobi:~/Projects/reporter$ git status
On branch master
Your branch is up-to-date with 'gerrit/master'.
nothing to commit, working directory clean
Как вы можете видеть, я как-то создал локальную ветвь с именем gerrit/master, которая вызвала конфликт, поскольку git не мог решить, отслеживать ли локальную ветку или удаленную. Удаление ошибочной ветки исправило проблему и снова сделало меня счастливым.