Git Extensions Push使用默认设置(*:refs / heads / *)会弄乱所有分支

时间:2012-08-31 16:39:13

标签: git git-branch git-push git-extensions git-gc

问题

这听起来像是一个GitExtensions错误,I couldn't find specific info。我相信当你有一个超过1个分支的裸存储库时会出现问题。如果你然后推,你会得到一个警告,如果你选择忽略你会发现乱七八糟的分支。或者取决于你如何推动它,甚至没有出现警告,它到处都是厄运!

假设我们有2个名为masteranother的本地分支。并且默认origin设置为推送。定期推送后,我们还会找到origin/masterorigin/another,这就是全部。

但是在注定要失败之后,我们会发现重复的origin/masterorigin/another以及origin/refs/heads/master,这也是重复的。对于每个额外的分支。它是not like we're pushing all branches或其他东西,我们也不是Multiple Branches feature

事实上,在发生这种情况之后,我们甚至不能简单push没有错误! (是的,当然使用窗口)

Pushing to \\\server\git\repo
error: dst refspec refs/heads/another matches more than one.
error: failed to push some refs to '\\\server\git\repo'

使用git branch -r列出分支时,问题变得明显。

修复它

我们需要做这样的事情:

  1. refs/heads中手动删除 origin 文件夹。有时它仅适用using git push origin :<branchName>,其他我们需要更强大并直接进入文件夹。这是艰难的一步,当那些不起作用时,主要问题就会发生......
  2. git fetch -p,用于将原始更改带到本地。
  3. 最终通过所有客户并使用git remote update。如果需要,可以逐个删除相同的分支,也可以通过任何方式删除相同的分支,如同强健并直接再次进入文件夹。这个步骤还有另一个问题,有时我还无法诊断。
  4. 频率

    对我们来说,这是一个明确的事实。即使我没有做过很多实验来查看究竟是什么导致它,但它确实发生在使用此repo的5台机器中的任何一台,所有机器都以相同的方式配置,除了bare

    每次发生这种情况我都必须跑步并找出解决方法。这次我决定记录它,因为我从来没有在网上找到任何具体的内容。

    为什么

    这里的问题是:为什么会发生这种情况,以及如何预防?它是否GitExtensions fault only?在我们这边,只有在GitExtensions中才会出现这种情况。

1 个答案:

答案 0 :(得分:0)

在处理另一个更简单的 rep 时,不小心(也巧合地,最后)发现了罪魁祸首!

.git/config下,我们为[remote "origin"]提供了这两行:

push = refs/heads/*:refs/heads/*
push = refs/tags/*:refs/tags/*

只需将添加到顶部,即可解决所有问题:

push = *:* # hack for git extensions

首先是2行的原因是“将所有内容推送到服务器”,包括标签和磁头。

我相信,不知怎的,GitExtensions会以错误的方式读取它们并改变它自己的默认行为(为什么它会在第一个设置的右侧?)从而在每次推送时有效地执行此操作:

> git push origin *:refs/heads/*

男孩,我告诉你,清理这些烂摊子不是一件简单的任务!

解决。