代码之家  ›  专栏  ›  技术社区  ›  che

为什么git branch-t会因为“不跟踪:不明确的信息”而失败?

  •  20
  • che  · 技术社区  · 16 年前

    当我尝试创建跟踪远程分支的新分支时,我得到以下结果:

    $ git branch -t test origin/foo
    error: Not tracking: ambiguous information for ref refs/remotes/origin/foo
    

    The source

    有人能告诉我发生了什么事以及如何修复吗?

    5 回复  |  直到 11 年前
        1
  •  35
  •   Neil Traft    5 年前

    当我有两个具有相同(默认)获取模式的远程回购时,我也看到了这一点( fetch = +refs/heads/*:refs/remotes/origin/* )同样的树枝。

    最初的错误是创建了两个具有相同功能的遥控器 fetch 配置新的远程设备具有不同的名称,因此其文件夹的名称也应更改。以下是正确的多远程配置示例:

    [remote "origin"]
        url = <primary-source>
        fetch = +refs/heads/*:refs/remotes/origin/*
    [remote "alt"]
        url = <alternate-source>
        fetch = +refs/heads/*:refs/remotes/alt/*
    

    代替 alt 你可以选择任何名字。

    说明:

    意义 refs/heads/*:refs/remotes/origin/* is:获取所有远程引用 refs/heads refs/heads/origin 在我们这边。 是存储分支的路径,因此如果有分支 foo 在远程上,它将被提取到 origin/foo 在您的本地回购协议中。这个 + 开始时,表示应始终覆盖目标分支(不包括一些附加检查)。

    或者:

    .git/config ,例如:

    [branch "mybranch"]
        remote = origin
        merge = refs/heads/mybranch
    
        2
  •  17
  •   VonC    16 年前

    不,因为它找到了 更多 多个匹配的远程分支,这意味着 remote_find_tracking() 返回给定本地分支引用的多个跟踪分支。

    some_remote_branch 已经 你当地的分支机构跟踪的?
    (一) git config -l 将允许您检查当前设置的内容)。
    git branch -r 还可以帮助列出您当前的远程跟踪分支。)


    错误,如图所示 this thread :

    远程分支是“真正的”远程跟踪分支。您不在本地提交它们,它们本质上是远程存储库中发生的事情的只读副本。


    可以向其提交更改的分支。或者,可以将分支配置为“跟随”一个远程跟踪分支。这意味着 git-pull git-fetch “然后” git-merge

    这是我们的工作 git获取
    Git-pull git获取 然后运行一个 git合并

    问题是,对于git merge:

    当这种情况发生时, 必须决定哪一个 remote-tracking-branch 合并到当前签出的本地分支。
    你可以设置哪一个 远程跟踪分支 将在这种情况下使用--track选项选择。

    --track 设置本地后续分支以引用远程分支, 到追踪部门

    Consider that 远程查找跟踪()

    /*
     * For the given remote, reads the refspec's src and sets the other fields.
     */
    int remote_find_tracking(struct remote *remote, struct refspec *refspec);
    

    可能它认为它已经有一个本地跟踪分支匹配 一些远程分支 . 你们当地有没有同名的分行?
    或者,反过来说:您当前的分支有一个具有类似名称的远程分支,这使得它自然成为任何应用程序的候选分支 git合并 当前位置尝试使其跟踪 另一个 git合并 无法选择使用远程服务器的更改更新/合并哪个本地分支。

        3
  •  12
  •   che    16 年前

    知道了!问题是,我以前曾使用 --mirror ,以获得我的存储库的备份/公共副本。

    如果你跑

    git remote add --mirror <name> <url>
    

    它不仅将远程设备标记为镜像(这是推送所需的),而且还配置 remote.<mirror>.fetch 用于镜像的选项 +refs/*:refs/* ,这意味着所有分支突然“跟踪”镜像存储库,任何创建跟踪分支的尝试都将失败。

    (作为额外的奖励,跑步 git fetch <mirror> 将用备份repo中的旧引用覆盖所有引用。)

    远程。<镜像>。取来 : (我希望它的意思是“永远不要拿任何东西”)。这显然解决了跟踪问题,并消除了致命的抓取。

        4
  •  5
  •   GuSuku    8 年前

    这里提到的其他修复方法都不适用于我。最终起作用的是:

    $ git branch -t test origin/test
    error: Not tracking: ambiguous information for ref refs/remotes/origin/test
    

    test 但没有上游设置。

    现在,我打开了门 .git/config 文件(没有分支机构的任何记录) 测验 )并手动添加了以下内容:

    [branch "test"]
            remote = origin
            merge = refs/heads/test
    

    之后一切顺利。

        5
  •  2
  •   amacleod    11 年前

    我遇到了这样的情况,但我不知道如何。上市公司 git branch -av 只显示了我关心的分支的一个远程跟踪分支( origin/dev ).

    我所做的是使用十六进制提交哈希而不是 起源/发展 :

    git checkout -b dev abc123
    git push -u origin dev
    

    -u 吉特说 Branch dev set up to track remote branch dev from origin. 随后的拉和推正如我所预料的那样起作用。