我正在寻找远程分支并陷入某种循环。
我取了一次然后得到:
$ 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
答案 0 :(得分:6)
@torek
是正确的,它由Linux
和Windows
的差异引起。 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 3bb16a8见Nguyễn Thái Ngọc Duy (pclouds
)(2016年12月4日)
(Junio C Hamano -- gitster
--合并于commit 73e494f,2016年12月19日)
tag
,branch
,for-each-ref
:添加--ignore-case
进行排序和过滤。
这个选项使得排序忽略大小写,这在你拥有时非常棒 名为bug-12-do-something
,Bug-12-do-some-more
和。{BUG-12-do-what
并希望将它们组合在一起 外部排序可能不是一个选项,因为我们从git-branch和git-tag中丢失了颜色和列布局。对于过滤也可以这么说,但它可能不那么重要,因为如果你绝望的话,你可以随时使用丑陋的模式
[bB][uU][gG]-*
。您不能进行区分大小写的过滤和不区分大小写的排序(或 相反,尽管如此。对于
branch
和tag
,应该这样做 没问题。for-each-ref
,作为一个管道,可能需要更好的控制 但是我们总是可以在有需要时添加--{filter,sort}-ignore-case
为了它。
git branch --ignore-case --list
注意:" --ignore-case
" " git for-each-ref
"的选项(和它的朋友)
没有正常工作,已在Git 2.19(Q3 2018)中修复。
commit 639ab5e见Aleksandr Makarov (deviance
)(2018年7月2日)
请commit e674eb2查看commit ee0f3e2,Jeff 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 cfe004a(ref-filter
:限制遍历前缀,2017-05-22,Git v2.14.0),我们将前缀提供给ref后端,以便它可以优化ref迭代。我们没有机制告诉后端我们匹配 不区分大小写。也不可能很快就会有一个, 因为打包后端依赖二进制搜索排序列表 refs 让我们来看看这个案子吧。额外的过滤是一个 我们根本无法做到的优化。我们仍然会给出正确的答案 通过
match_name_as_path(
)中的过滤来回答。