становится

ользую git в качестве внешнего интерфейса для Subversion (через git svn).

Итак, для каждого svn trunk / branch у меня есть удаленная ветка в git с именем "remotes / xxx". Например, «пульты / транк», «пульты / фуфайка».

Теперь я хочу иметь одну локальную ветку «по умолчанию» для каждой удаленной ветви, чтобы использовать ее для dcommit. Проблема в том, что я хочу, чтобы такие ветки были названы в честь веток Subversion, таких как "trunk", "coolfeature", поэтому в git есть следующие ветки:

trunk
coolfeature
remotes/trunk
remotes/coolfeature

Проблема в том, что каждый раз, когда я ссылаюсь на «trunk» или «coolfeature», git жалуется, что имя ветки неоднозначно. Ничего страшного, но мне неудобно.

Вопрос в том, как я могу справиться с этим предупреждением, если предположить, что просто переименовать ветки - это не то, что я хочу сделать. Каковы лучшие практики для таких случаев?

 MatrixFrog10 янв. 2011 г., 08:00
Я не уверен. Я избежал этого, просто выбрав разные, но похожие имена. Тем не менее, вы можете попробовать использоватьrefs/heads/trunk или, может быть, даже простоheads/trunk, Я думаю, что это должно работать.
 jubobs11 янв. 2019 г., 07:19

Ответы на вопрос(4)

Решение Вопроса

--prefix=svn/ флаг кgit svn clone команда, тогда все ветви Subversion будут названы какremotes/svn/branchname, Если это приемлемо для вас, это исправляет предупреждение «refname is Двусмысленное». Это также дает вам хороший способ обращения к удаленным ветвям SVN, например, если вы хотите создать локальную ветвь отслеживания, это будет что-то вроде:

$ git checkout -b branchname svn/branchname

В этом случае локальная ветвь имеет то же имя, что и удаленная ветвь svn, и не имеет неоднозначной проблемы с refname.

 Narrim20 апр. 2015 г., 03:18
Начиная с git 2, предпочтение svn по умолчанию установлено в svn /, если вы хотите использовать другой префикс или хотите отслеживать несколько репозиториев svn, убедитесь, что вы установили его во время клонирования ИЛИ через .git / config
 MikeD10 мар. 2014 г., 19:27
Если вы уже создали ветку с тем же именем, вы можете переименовать вашу ветку с помощью этой команды: git branch -m [currentName] [newName]
 EnigmaCurry21 сент. 2011 г., 21:07
Я просто клонировал в новый каталог, а затем извлек локальные ветки, которые у меня были, из другого каталога: git fetch ../other_dir имя_раздела: имя_сервера --- завершение табуляции также отлично подходит для имен веток.
 Elazar Leibovich29 мар. 2011 г., 13:54
Как я могу исправить репозиторий, который я уже клонировал, чтобы иметь--prefix=svn/?

установитеcore.warnAmbiguousRefs вfalse:

git config --global core.warnambiguousrefs false

Если вы хотите это поведение только для одного хранилища, опустите--global флаг.

 bakoyaro25 мар. 2013 г., 13:16
Возможно, я нарушил все все известные / неизвестные правила, но попробовал «git tag -a HEAD -m 'Start of repo'» в новом репо, после чего я получил сообщение об ошибке OPs. Исправление, описанное в этом посте, позволило мне продолжать работать.

при обращении к локальным ветвям ставьте перед ними префиксheads/

например, конфликтующая веткаtopic

$ git diff topic remotes/topic
warning: reframe 'topic' is ambiguous.
...

становится

$ git diff heads/topic remotes/topic
...

что у вас есть еще один «багажник» и «coolfeature» в качестве тега. В этом случае git не знает, ссылаетесь ли вы на ветку или тег. Переименуйте теги и проверьте, что git не сообщает «неоднозначное» имя

 Frederick Nord15 сент. 2014 г., 09:10
Это не тот случай для меня..git/refs/ содержит однозначные имена. У меня нет никаких тегов. Что заставляет мерзавца жаловаться в первую очередь?

Ваш ответ на вопрос