警告:使用git-svn时,引用名称“xxx”不明确

49

我正在使用git作为Subversion(通过git svn)的前端。

因此,对于每个svn trunk/branch,我在git中都有一个名为“remotes/xxx”的远程分支。例如“remotes/trunk”、“remotes/coolfeature”。

现在我想为每个远程分支都拥有一个“默认”的本地分支,以便用于dcommit。问题是我希望这些分支按照Subversion分支的名称命名,例如“trunk”、“coolfeature”,所以我在git中有以下分支:

trunk
coolfeature
remotes/trunk
remotes/coolfeature

问题在于每次我引用“trunk”或“coolfeature”时,git都会抱怨分支名称不明确。虽然这不是什么大问题,但我感到有些不舒服。

那么问题来了,如果我不想简单地重命名分支,我该如何处理这个警告呢?针对这种情况有哪些最佳实践?


3
我不太确定。我通过选择不同但相似的名称来避免这种情况。不过,你可以尝试使用 refs/heads/trunk 或者只用 heads/trunk。我认为这应该可以起作用。 - Tyler
相关链接:https://dev59.com/i18e5IYBdhLWcg3wJXrm - jub0bs
4个回答

40
如果您将--prefix=svn/标志传递给git svn clone命令,那么所有的Subversion分支都将被命名为remotes/svn/branchname。如果这对您是可接受的,它可以修复“refname is ambiguous”警告。它还提供了一种方便的方法来引用远程svn分支,例如,如果您想要创建一个本地跟踪分支,它应该是这样的:

$ git checkout -b branchname svn/branchname

然后本地分支将具有与远程svn分支相同的名称,并且没有歧义的refname问题。


19
我该如何修复已经使用--prefix=svn/克隆的代码库? - Elazar Leibovich
我刚刚克隆到一个新目录,然后获取了我从其他目录中拥有的本地分支:git fetch ../other_dir branch_name:branch_name --- 对于分支名称来说,选项卡自动完成功能非常棒。 - EnigmaCurry
1
如果您已经使用相同的名称创建了一个分支,您可以使用以下命令将其重命名:git branch -m [currentName] [newName]。 - MikeD
从git 2开始,默认情况下svn前缀设置为svn/。如果您想要不同的前缀或想要跟踪多个svn repo,请确保在克隆期间或通过.git/config进行设置。 - Narrim

13

如果您只是想要消除警告,请将core.warnAmbiguousRefs设置为false

git config --global core.warnambiguousrefs false

如果您只想针对单个存储库设置此行为,请省略 --global 标志。


我可能在这里违反了所有已知/未知的规则,但是我尝试在一个新的仓库上使用 "git tag -a HEAD -m 'Start of repo'" 命令,之后我收到了 OPs 的错误信息。这篇帖子中描述的修复方法让我能够继续工作。 - bakoyaro

1

你可能有另一个名为“trunk”和“coolfeature”的标签。在这种情况下,Git 不知道你是指分支还是标签。重命名标签并检查 Git 是否报告“模糊”的名称。


这对我来说并不是问题。.git/refs/ 包含明确的名称。我没有任何标签。是什么导致了 git 在第一时间抱怨? - Frederick Nord

1
为了避免冲突信息,在引用本地分支时,请在前面加上heads/前缀。

例如,有冲突的分支topic

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

变成

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接