Git使用普通名称获取一次分支,并使用大写字母获取一次

时间:2014-09-28 14:28:09

标签: git case-insensitive git-fetch remote-branch

我正在寻找远程分支并陷入某种循环。

我取了一次然后得到:

$ git fetch
* [new branch]      minorRelease/something-> origin/minorRelease/something

然后我再次获取并获得:

$ git fetch
* [new branch]      minorRelease/Something-> origin/minorRelease/Something

相同的分支,但有一个大写S

我尝试从以下文件夹.git/refs/remotes/origin/minorRelease中删除该文件,但在再次抓取时,我得到了两个并返回上面的循环:

$ git fetch
* [new branch]      minorRelease/Something-> origin/minorRelease/Something
* [new branch]      minorRelease/something-> origin/minorRelease/something

2 个答案:

答案 0 :(得分:6)

@torek是正确的,它由LinuxWindows的差异引起。 Linux区分大小写,而Windows则不区分大小写。您可以使用ls-remote来显示服务器中的分支。

git ls-remote --heads origin

我认为在你的情况下,输出应该包括两个分支,只有S的情况不同。

ref/heads/minorRelease/Something
ref/heads/minorRelease/something

如果发现其中一个实际上是重复的,则可以删除远程分支。然后再次fetch。现在应该没事了。

git push origin :minorRelease/Something
git fetch

答案 1 :(得分:1)

注意:使用Git 2.12(2017年第一季度),这将变得更容易发现,因为您可以列出具有不区分大小写选项的分支。

commit 3bb16a8Nguyễn Thái Ngọc Duy (pclouds)(2016年12月4日) Junio C Hamano -- gitster --合并于commit 73e494f,2016年12月19日)

  

tagbranchfor-each-ref:添加--ignore-case进行排序和过滤。
  这个选项使得排序忽略大小写,这在你拥有时非常棒   名为bug-12-do-somethingBug-12-do-some-more和。{   BUG-12-do-what并希望将它们组合在一起   外部排序可能不是一个选项,因为我们从git-branch和git-tag中丢失了颜色和列布局。

     

对于过滤也可以这么说,但它可能不那么重要,因为如果你绝望的话,你可以随时使用丑陋的模式[bB][uU][gG]-*

     

您不能进行区分大小写的过滤和不区分大小写的排序(或   相反,尽管如此。对于branchtag,应该这样做   没问题。 for-each-ref,作为一个管道,可能需要更好的控制   但是我们总是可以在有需要时添加--{filter,sort}-ignore-case   为了它。

git branch --ignore-case --list

注意:" --ignore-case" " git for-each-ref"的选项(和它的朋友) 没有正常工作,已在Git 2.19(Q3 2018)中修复。

commit 639ab5eAleksandr Makarov (deviance)(2018年7月2日) 请commit e674eb2查看commit ee0f3e2Jeff King (peff)(2018年7月2日) (由Junio C Hamano -- gitster --合并于commit 4301330,2018年7月24日)

  

ref-filter:避免使用--ignore-case

进行后端过滤      

for-each-ref--ignore-case一起使用时,我们希望match_name_as_path()进行不区分大小写的匹配。
  但是,在我们到达那里之前,还有一层额外的过滤。由于commit cfe004aref-filter:限制遍历前缀,2017-05-22,Git v2.14.0),我们将前缀提供给ref后端,以便它可以优化ref迭代。

     

我们没有机制告诉后端我们匹配   不区分大小写。也不可能很快就会有一个,   因为打包后端依赖二进制搜索排序列表   refs   让我们来看看这个案子吧。额外的过滤是一个   我们根本无法做到的优化。我们仍然会给出正确的答案   通过match_name_as_path()中的过滤来回答。