Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git扩展使用默认设置推送(*:refs/heads/*)会弄乱所有分支 问题_Git_Git Branch_Git Push_Git Extensions_Git Gc - Fatal编程技术网

Git扩展使用默认设置推送(*:refs/heads/*)会弄乱所有分支 问题

Git扩展使用默认设置推送(*:refs/heads/*)会弄乱所有分支 问题,git,git-branch,git-push,git-extensions,git-gc,Git,Git Branch,Git Push,Git Extensions,Git Gc,这听起来像是一个GitExtensions bug,对它来说。我认为,当您有一个包含多个分支的裸存储库时,问题就会出现。如果你按下,你会得到一个警告,如果你选择忽略,你会发现混乱的分支。或者取决于你如何推动它,甚至警告都没有出现,到处都是厄运 假设我们有两个本地分支,分别称为master和另一个。以及为推送设置的默认origin。经过定期推送,我们还可以找到原点/主控和原点/另一个,仅此而已 但是在注定失败的推送之后,我们会发现重复的origin/master和origin/otherpluso

这听起来像是一个GitExtensions bug,对它来说。我认为,当您有一个包含多个分支的裸存储库时,问题就会出现。如果你按下,你会得到一个警告,如果你选择忽略,你会发现混乱的分支。或者取决于你如何推动它,甚至警告都没有出现,到处都是厄运

假设我们有两个本地分支,分别称为
master
另一个
。以及为推送设置的默认
origin
。经过定期推送,我们还可以找到
原点/主控
原点/另一个
,仅此而已

但是在注定失败的推送之后,我们会发现重复的
origin/master
origin/other
plus
origin/refs/heads/master
,这也是重复的。每增加一个分支。它是什么的,我们也不用

事实上,在这种情况发生之后,我们甚至不能简单地
而不出错!(是的,当然是使用windows)

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

修理它 我们需要这样做:

  • 手动删除
    origin
    中的
    refs/heads
    文件夹。有些时候,它只工作于git push origin:
  • ,有些时候,我们需要更健壮地直接进入文件夹。这是艰难的一步,主要问题发生在那些不起作用的时候
  • ,以便将原点更改带到本地
  • 最终检查所有客户端并使用
    git远程更新
    。如果需要,一个接一个地或通过任何方式移除相同的分支,例如,再次将它们牢固地直接放入文件夹中。在这一步骤中,有时还有另一个问题,我还无法诊断
  • 频率 对我们来说,这是一个明确的事实。尽管我还没有做过很多实验来了解到底是什么导致了它,但它确实发生在使用此repo的5台机器中的任何一台机器上,除了
    bare
    之外,所有机器都以相同的方式配置

    每次它发生的时候,我都得跑去看看如何修复它。这次我决定把它记录下来,因为我在网上找不到足够具体的东西

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

    在处理另一个更简单的rep时,意外地(也是巧合地,最终)发现了罪犯

    .git/config
    下,我们有两行代码用于
    [远程“源站”]

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

    push = *:* # hack for git extensions
    
    最初,这两行代码的原因是“将所有内容推送到服务器”,包括标签和标题

    我相信,不知何故,GitExtensions阅读了这些内容,并以错误的方式更改了自己的默认行为(为什么它只获得了第一个设置的正确一面?),从而在每次推送时都有效地做到了这一点:

    > git push origin *:refs/heads/*
    
    孩子,我要告诉你,清理那些乱七八糟的东西可不是一件简单的事


    已解决。

    您的参考规范看起来可疑。这不应该是
    +refs/heads/*:refs/remotes/origin/*
    ?@knittl我不确定,还没有在命令行上尝试过。我已经有足够多的问题,我不能妥善解决,因为它是。但这就是Git扩展在两个不同的输入字段中显示的内容:
    *
    ,然后是
    refs/heads/*
    push = *:* # hack for git extensions
    
    > git push origin *:refs/heads/*