📖
mabutou's wiki
  • About
  • 🤖Linux
    • 常规日志ip统计
    • traefik 生成 htpasswd
    • 日志查询
      • 按时间筛选跨行日志
      • 文本搜索 Ripgrep
      • goaccess 解析日志文件
      • ripgrep 筛选指定时间范围日志
    • 根据端口号,找到对应进程
    • Centos 7
      • centos7 安装 MySQL 客户端
    • Ubuntu
      • 清理ubuntu磁盘空间
    • dpkg: warning: files list file for package 'x' missing
    • 转发本地代理到服务器
    • 50 Most Frequently Used UNIX
    • 僵尸进程
    • 查看大文件
    • install xrdp
    • locales error
    • OpenSSH Slow: Hanging at SSH2_MSG_SERVICE_ACCEPT received
    • shell 命令按次数输出v2访问日志的 ip 统计
    • ssh 端口转发脚本
    • shell proxy
    • firewall-cmd
    • mout webdav
    • du 命令
    • Unable to set locale
    • tar分卷压缩与解压缩
    • 合并目录下所有文件内容
    • rsync command
    • journal 日志大小限制
    • add swapfile
    • LVM manage
    • Linux logrotate
    • new user && group
    • Nginx 开启OCSP装订
    • 删除指定时间区间内的文件
    • 群晖初始化
    • ubuntu 内核升级脚本
    • curl 请求带有用户名和密码的 url
  • 🐬Front-end
    • 清理yarn/npm本地缓存
  • ❄️ K8S
    • 批量删除failed pod
    • 镜像批量打标签并推送
    • basic command
    • busybox 解析 pod ip
    • kubectl set node label
    • set pod's image version
    • k8s proxy
    • Force delete POD
  • 🐳Docker
    • 根据进程pid查看该进程所属的容器
    • docker pull 设置下载线程数
    • 查看数据卷目录
    • delete dangling images
    • install docker-compose
    • 按关键词停止容器
    • 限制&&清除容器日志
    • docker images 按大小排序镜像
    • 实时截取日志
    • 查询容器ip
    • 配置镜像加速
    • df 排除 多余文件系统
    • docker copy file from image to host && prune container
  • 🐮Rancher
    • 重置admin 密码
    • 卸载
  • 🐍Python
    • start a simple http_server
  • 🍎Mac
    • MacOS 浏览器播放音频没声音
    • mac 执行sed -i指令时,提示extra characters at the end of command
    • 创建 macOS U盘启动盘
    • Tmux 启动时 127 错误
    • Kill Apple Remote Desktop via ssh
    • hack wechat sqlite
    • 刷新 DNS
    • masscan 端口扫描
    • start apache_server
    • timemachine list and clean
    • dmg || .app 提示文件已损坏
    • 重启 Dock 栏
    • macOS(BSD system) 禁用 ssh 密码登录
  • 🖥️Windows
    • 命令行获取电脑的序列号
    • enable windows ping icmp
    • 关闭休眠模式
    • 卓越性能模式
  • ⌨️ Cheatsheet
    • VIM
    • Bash
    • Git
      • github init
      • Git 变更默认分支名
      • Git 大小写问题
    • Tmux
    • ffmpeg
  • Application
    • chrome 清除 dns && https 缓存
  • 正则表达式
    • basic
    • regular expression
  • Proxmox
    • stop pve
  • VMware
    • 虚拟机设置静态ip, Vmware 虚拟机配置全攻略 - 少数派
  • Hetzner
    • hz 单ip 独服 安装 proxmox 后网卡配置
    • hetzner_box
  • Oracle-Cloud-ARM
    • 修改引导卷大小
  • 镜像源
    • pip 清华源
    • ubuntu 阿里云镜像
    • centos 阿里云镜像
    • npm 淘宝镜像
由 GitBook 提供支持
在本页
  • 第一个问题
  • 第二个问题
  • 第三个问题
  • 第四个问题
  • 总结

这有帮助吗?

  1. ⌨️ Cheatsheet
  2. Git

Git 大小写问题

上一页Git 变更默认分支名下一页Tmux

最后更新于4年前

这有帮助吗?

本文由 转码, 原文地址

针对以下几个问题,来谈谈在使用 git 时,会遇到的大小写问题:

  1. 新克隆的仓库,什么都没做,却存在修改

  2. 切换分支,切几次都不成功,但也不报错

  3. 推送本地分支到远端时报错:can not be resolved to branch

  4. 切换分支后,本地的头节点与远端上的不一致(切换之前已经 fetch all 了)

  5. 本地更新分支时报错:can not lock ref xxx: ref xxx is at xxx but expected xxx

第一个问题

  1. 当仓库中存在文件名相同,但是大小写不同时,如果你在 windows 上进行克隆操作,克隆完成后,进入仓库去执行 git status 查看是会存在修改的,为此 git-2.20 版本增加了 warning 来提示用户:

warning: the following paths have collided (e.g. case-sensitive paths on a case-sensitive filesystem) and only one from the same colliding group is in the working tree:

  1. 如果你仓库使用了 LFS,也有可能出现刚克隆完,就存在修改的问题,这个问题,以后再详细阐述吧

解决方案的话:没有好的解决方案,建议在 linux 下,将出问题的文件名修改掉,上库

第二个问题

  1. 正常切换分支时,git 是会在命令窗口中输出:

Switching to branch xxx

  1. 如果当前目录下,存在跟你分支命同名的文件夹或文件时,在 git-2.21 版本之前,执行 git checkout 时,是不会有任何输出的,但可以通过 git checkout xxx -- 来切换分支,通过 git checkout -- xxx 来回退文件

  2. git-2.21 为了消除分支名和文件名同名的歧义,增加了日志打印:

Fatal: xxx could be both a local file and a tracking branch. Please use -- (and optionally --no-guess) to disambiguate

  1. 分析下命令 git checkout xxx:

如果是本地分支名,切换过去 如果是被跟踪的路径名,重置它 如果是远端分支名,创建分支,并切换过去

第三个问题

对于分支名带有 / 的会出现上述报错,先简单地来复现一下:

  1. 创建一个分支为:A/test-1

  2. 再创建一个分支为:a/new-1

  3. 将分支 a/new-1 推送到远端,报错:

Fatal: can not be resolved to branch

问题的原因是:

  1. 创建分支时,git 会在本地. git/refs/heads / 文件夹下创建一个以分支名命名的文件,用来跟踪这个分支指向的头节点

  2. 上述过程,首先会创建 A 文件夹,然后在它下面创建 test-1 文件

  3. 当创建第二个分支时,由于 windows 是不区分大小写的,所以直接在 A 文件夹下创建了 new-1 文件

  4. 最后执行 git push origin a/new-1 时就报错了

解决方案就是:

  1. 重命名分支名

  2. 删除 A/test-1 分支,同时在删除 A 文件夹,再创建 a/new-1 分支

第四个问题

这是本地存在分支名和 tag 名同名的情况,所以也一起说一下。

虽然它们名字相同,但是头节点不同,这样可能会导致在开发过程基于它们拉出来的分支会不一样,开发的功能也会有影响。

解决方案:重命名分支或者 tag

总结

分支 / Tag 命名很重要,就像命名函数,变量一样,要有意义,能自解释,不产生歧义、冲突。如果开发平台有涉及 windows 的话,还要注意大小写的问题,要尽量避免

简悦 SimpRead
zhuanlan.zhihu.com