0

问题

这听起来像是一个 GitExtensions 错误,我找不到特定的信息。我相信当您拥有一个包含 1 个以上分支的裸存储库时,就会出现问题。如果你再推,你会得到一个警告,如果你选择忽略你会发现混乱的分支。或者取决于你如何推动它,甚至没有出现警告,而且到处都是厄运!

假设我们有 2 个名为masterand的本地分支another。并且默认origin设置为推送。在定期推送之后,我们还会找到origin/masterand origin/another,仅此而已。

但是在注定的推动之后,我们会发现重复origin/master和加origin/anotherorigin/refs/heads/master,这也是重复的。对于每一个额外的分支。这不像我们要推送所有分支或其他东西,也不是我们使用Multiple Branches 功能

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

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 git push origin :<branchName>
  2. git fetch -p,用于将原点更改带到本地。
  3. 最终通过所有客户端并使用git remote update. 如果需要,可以一个一个或通过任何方式删除相同的分支,例如再次健壮地直接进入文件夹。这个步骤中还有另一个问题,有时我还无法诊断。

频率

对我们来说,这是一个既定事实。尽管我没有做很多实验来看看究竟是什么原因造成的,但它确实发生在使用这个 repo 的 5 台机器中的任何一台上,除了bare.

每次发生这种情况时,我都必须运行并找出如何解决它。这次我决定把它记录下来,因为我在网上找不到足够具体的东西。

为什么

这里的问题是:为什么会发生这种情况,以及如何预防?它甚至只是 GitExtensions 错误吗?在我们这边,这肯定会发生,只有在 GitExtensions 中这个特定的场景。

4

1 回答 1

0

在与另一个更简单的代表打交道时,意外(也是巧合最后)发现了罪魁祸首!

下面.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/*

男孩,我要告诉你,收拾烂摊子可不是一件简单的事!

解决了。

于 2012-09-04T18:47:41.037 回答