Почему git branch-t терпит неудачу с "не отслеживанием: неоднозначная информация"?
когда я пытаюсь создать новую ветку, отслеживающую удаленную ветку, я получаю следующее:
$ git branch -t test origin/foo
error: Not tracking: ambiguous information for ref refs/remotes/origin/foo
источник кажется, как-то искать ветви для отслеживания и выбрасывает меня, потому что он находит меньше более одного, но я не совсем понимаю, что он ищет, так как я уже сказал ему, что отслеживать в командной строке.
может кто-нибудь сказать мне, что происходит и как это исправить?
5 ответов
Я видел это также, когда у меня было два удаленных РЕПО с тем же (по умолчанию) шаблоном выборки (fetch = +refs/heads/*:refs/remotes/origin/*
) и той же ветви.
Я все еще не понял, как исправить это правильно, так как я хочу продолжать нажимать/тянуть на оба РЕПО, но вручную добавлять информацию в проект .git/config
строительство, например:
[branch "mybranch"]
remote = origin
merge = refs/heads/mybranch
потому что он находит меньше одного
нет: потому что он находит больше чем одна соответствуя удаленная ветвь, которая значит функцию remote_find_tracking()
возвращает более одной ветви отслеживания для данной локальной ветви ref.
Is some_remote_branch
не уже отслеживается одним из ваших местных филиалов?
(a git config -l
позволит вам проверить, что вы в настоящее время настроены).
(a git branch -r
может также помочь перечислить ваш текущая удаленные ветки. )
удаленные ветви, которые я думал, что-то другое, что удаленные ветви отслеживания.
неправильно, как показано этой теме:
удаленные ветви являются "реальными" удаленными ветвями отслеживания. Вы не фиксируете их локально, они по существу являются копиями только для чтения того, что происходит в удаленном репозитории.
Если ты попытаешься ... 'git-checkout' ветка дистанционного слежения, вы получите отделенную голову.местное отделение:
Ветвь, в которую можно вносить изменения. При необходимости ветвь может быть настроена для "следования" за одной из ветвей удаленного отслеживания. Это означает, что 'git-pull
'без аргументов (когда ваша локальная ветвь будет проверена), будет автоматически'git-fetch
' и 'git-merge
' отделение дистанционного слежения.
теперь:
это работа
git-fetch
для обновления ветвей удаленного отслеживания с любыми изменениями, найденными в удаленном репозитории.Git-pull
работаетgit-fetch
а тоgit-merge
для обновления текущей ветви.
проблема в том, что для git-merge:
когда это происходит,
git-merge
должны решить, какойremote-tracking-branch
для слияния с текущей проверенной локальной веткой.
Вы можете установить, какойremote-tracking-branch
будет выбран в этой ситуации с-трек выбор.
--track
устанавливает локальную следующую ветвь для ссылки на ветвь удаленного,не в отдел отслеживания
считают, что remote_find_tracking()
принимает один удаленный и refspec с заполненным src и возвращает данный refspec после заполнения его dst, если соответствующее отслеживание было настроено для удаленного, то есть git.
/*
* For the given remote, reads the refspec's src and sets the other fields.
*/
int remote_find_tracking(struct remote *remote, struct refspec *refspec);
может быть, он считает, что у него уже есть локальное соответствие следующей ветви some_remote_branch
. У вас есть местное отделение с таким же названием?
Или наоборот: ваша текущая ветвь имеет удаленную ветвь с аналогичным именем, что делает ее естественным кандидатом для любого git-merge
: пытается сделать его track другое удаленная ветка сделает git-merge
невозможно выбрать, какую локальную ветвь обновить / объединить с изменениями удаленного.
понял! Проблема заключалась в том, что я ранее настроил пульт дистанционного управления с --mirror
, С целью создания резервной / общедоступной копии моего репозитория.
если вы запустите
git remote add --mirror <name> <url>
он не только помечает пульт как зеркало (что я хотел для толчков), но и настраивает remote.<mirror>.fetch
опция для зеркала в +refs/*:refs/*
, что означает, что все ваши ветви внезапно "отслеживают" ваш зеркальный репозиторий и любая попытка создать ветку отслеживания будет неудача.
(в качестве дополнительного бонуса, под управлением git fetch <mirror>
собирается перезаписать все ваши ссылки со старыми из вашего резервного РЕПО.)
решение, которое, похоже, устраняет эту проблему, устанавливает remote.<mirror>.fetch
to :
(что, я надеюсь, означает "никогда ничего не приносить"). Это, по-видимому, устраняет проблему отслеживания и устраняет смертельную выборку.
Я попал в такую ситуацию, но не знаю как. Список из git branch -av
показал мне только одну удаленную ветку отслеживания для ветки, о которой я заботился (origin/dev
).
то, что я сделал, чтобы исправить это, было использовать шестнадцатеричный хэш фиксации вместо origin/dev
:
git checkout -b dev abc123
git push -u origin dev
когда я сделал толчок с -u
ГИТ сказал Branch dev set up to track remote branch dev from origin.
последующие тяги и толчки работали так, как я ожидал.
ни один из упомянутых здесь работал для меня. В итоге получилось вот что:--6-->
$ git branch -t test origin/test
error: Not tracking: ambiguous information for ref refs/remotes/origin/test
после запуска выше, хотя git жаловался, он в конечном итоге создал локальную ветку test
но нет набора вверх по течению.
теперь я открыл .git/config
файл (который не имел никакой записи ветви test
) и добавил следующее вручную:
[branch "test"]
remote = origin
merge = refs/heads/test
после чего все работало нормально.