当我尝试创建一个跟踪远程分支的新分支时,我得到了这个:
$ git branch -t test origin/foo
error: Not tracking: ambiguous information for ref refs/remotes/origin/foo
Run Code Online (Sandbox Code Playgroud)
源代码似乎以某种方式搜索分支来跟踪并抛出我,因为它找到了减 不止一个,但我并没有完全得到它正在寻找的东西,因为我已经告诉它要在命令行上跟踪什么.
谁能告诉我发生了什么以及如何解决它?
Mat*_*ips 24
当我有两个具有相同(默认)获取模式(fetch = +refs/heads/*:refs/remotes/origin/*)和相同分支的远程repo时,我也看到了这一点.
我还没有找到如何正确修复它,因为我想继续推/拉到两个回购,但手动将信息添加到项目的.git/config工作,例如:
[branch "mybranch"]
remote = origin
merge = refs/heads/mybranch
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 15
因为它找不到一个
不,因为它找到了多个匹配的远程分支,这意味着该函数remote_find_tracking()为给定的本地分支ref返回多个跟踪分支.
是some_remote_branch不是已经被当地的一个分支跟踪?
(a git config -l将允许您检查您当前设置的内容).
(a git branch -r还可以帮助列出您当前的远程跟踪分支.)
远程分支,我认为远程跟踪分支是不同的.
错了,如这个帖子所示:
远程分支是"真正的"远程跟踪分支.您不在本地提交它们,它们本质上是只读副本,其中包含远程存储库中正在发生的事情.
如果您尝试'git-checkout'远程跟踪分支,您将获得一个分离的HEAD.本地分支:
您可以提交更改的分支.可选地,分支可以配置为"跟随"一个远程跟踪分支.这意味着'git-pull'无参数(当你的本地分支被检出时)将自动'git-fetch'然后'git-merge'远程跟踪分支.
现在:
git-fetch使用远程存储库中的任何更改来更新远程跟踪分支是一项工作.
Git-pull运行git-fetch然后运行agit-merge来更新当前签出的分支.
问题是,对于git-merge:
发生这种情况时,
git-merge必须决定将哪个remote-tracking-branch合并到当前检出的本地分支中.
您可以remote-tracking-branch使用--track选项设置在这种情况下将选择哪个.
--track设置本地跟随分支以引用远程分支,而不是跟踪分支
考虑如果 remote_find_tracking()为src填充了一个远程和refspec,并在填充其dst之后返回给定的refspec,如果为远程配置了适当的跟踪,意味着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);
Run Code Online (Sandbox Code Playgroud)
可能它认为它已经有一个本地跟随分支匹配some_remote_branch.你有这个完全相同名称的本地分支吗?
或者,反过来说:您当前的分支有一个类似名称的远程分支,这使得它成为任何一个的自然候选git-merge:尝试使其跟踪另一个远程分支将使git-merge无法选择更新/合并的本地分支远程的变化.
che*_*che 10
得到它了!问题是我之前已经设置了一个遥控器--mirror,目的是拥有我的存储库的备份/公共副本.
如果你跑
git remote add --mirror <name> <url>
Run Code Online (Sandbox Code Playgroud)
它不仅将远程标记为镜像(这是我想要的推送),而且还remote.<mirror>.fetch为镜像配置选项+refs/*:refs/*,这意味着所有分支突然"跟踪"您的镜像存储库以及任何创建跟踪分支的尝试会失败的.
(作为一个额外的好处,运行git fetch <mirror>将覆盖你的备份回购中的旧的refs.)
似乎解决这个问题的解决方案是设置remote.<mirror>.fetch为:(我希望,这意味着"永远不会取任何东西").这显然可以解决跟踪问题并消除致命的提取.
此处提到的其他修复均不适合我。最终工作的是这样的:
$ git branch -t test origin/test
error: Not tracking: ambiguous information for ref refs/remotes/origin/test
Run Code Online (Sandbox Code Playgroud)
运行上述后,即使 git 抱怨,它最终还是创建了一个本地分支,test但没有上游集。
现在,我打开.git/config文件(没有任何分支记录test)并手动添加以下内容:
[branch "test"]
remote = origin
merge = refs/heads/test
Run Code Online (Sandbox Code Playgroud)
之后一切正常。
| 归档时间: |
|
| 查看次数: |
10829 次 |
| 最近记录: |