Git 不识别文件名字母大小写变化

Git 不识别文件名字母大小写变化

问题

今天为一个项目撰写持续构建计划,撰写 Jenkinsfile 之后进行构建时报错:

[2022-05-23 16:54:21] unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /root/workspace/Dockerfile: no such file or directory script returned exit code 1

我一docker菜鸟教程开始还以为是我写缓存英文Jenkinsfile 有问题,可是这docker菜鸟教程Jenkinsfile 内容极其简单,就是拉取代码然后docker build,所以百思不得其解。然后仔细一看这个报错信息,又 Google 查了,可以确认出错的原因就是找不到 Dockerfile 这个文件。

然后我打开了代码仓库,定睛一看,好家伙,只有 dockerfile 而没有 Dockerfile,这我能忍。当时就本地打开我的 VSCoGooglede 就是一个重命名操作,嗯docker容器很好。然后重命名后一看,Git 状态没有丝毫变化,我愣住了。然后又去 Googlwindows7怎么重装系统e,发现这是我本机 G公积金it 默认的google正常操作,也就公积金是说 Git 它会忽略文件名大小写变化。

解决方案

为了解决上述google服务框架缓存视频变成本地视频个问题,可以终端运行以docker私库下命令:

git mv dockerfile Dockerfile

如果一次重命名了很多文件呢

只有一个文件名大小写变化的这种场景,已经知道怎么应对了。要是有很多个文件都是名字Docker大小写变化,这种情况又该怎么办呢。

不要慌,遇到这种场景,首先可以移除所有 gigoogle中国t 缓存:

git rm -r --cached .

上面这个命令将移除当前文件夹下所有文件/文件夹的 Git 缓存版本。公司让员工下班发手机电量截图运行这个命令后,会看到所有文件都显工资超过5000怎么扣税示在 git changes 中。 接下来,继续运行:

git add --all .

就可以重新添加所有文件,仅显示有更改的文件喽。

如果是文件夹dockerfile

前述问题是文件名大小写windows是什么意思发生了变工商银行化,Git 识别不出来的解决方案,如果要是换做文件夹,又该如何解决呢。 先来google商店试一下上述的针对文件的解决方案吧:

Git 不识别文件名字母大小写变化
(注:lf 命令是我个人自定义的一个命令别名。这里安利一下使用 exa 替代 ls)

奇怪,报错了。发生这种现象的主要原因是当缓存前正使用的是不区分文件名大小写的操作系统。事实上,最常见的两种用户电脑操作系统 Windows 和 macOS 都是不区分文件名大小写的操作系统。

那么对于文件夹名字大小写的变化,应该怎么让 Git 识别呢,可以用计算机科学领域内常用的分层思想:加一个中间层。在这里也就是借助一个临时的文件夹名字,具体命令如下:

git mv myfolder tempFolder && git mv tempFolder myFolder

这样确实也能解决问题,就是看起来好像有点投机取巧的意思,嗯…不太那么优雅。那么有没有更好的方法呢,当然有!用前面在 如果一次重命名了很多文件呢 部分里提到的方法就好了:

git rm -r --cached .
git add --all .  

Git配置项core.igwindows系统norecase

Git 的这种行为是由其 core.ignorecase 这个设置项控制的,而在 Windows 和 macOS 这两种不区分文件名大小写的系统上 co缓存视频合并re.ignorecase 的默认值为 true。那么马上就会想到,是否可以通过修改这个设置然后一劳永逸地解决这个问题呢。答案是缓存视频变成本地视频不可以!Say No!!!不建议通过设置 corre.ignorecase=false 使得 Git 忽略文件名大小写的主要原因是这会引起一些问题缓存视频在手机哪里找

设置缓存英文core.ignorecas枸杞e=false导致的问题

假设windows10激活密钥现在有一个文件为 dockerfile,将其重命名为 Dockerfile,这个时候 Git 不会显示任何文件变化,因为 Git 默认忽略文件名大小写变化嘛。好的,现在设置 Git core.ignorecase=false 配置,观察状态就会发现 Git 将 Dockerfile 当作了一个新文件(注意:dockerfile 依然是在之前已 co缓存英文mmited 的文件中),这显然不是我们想要的结果。如果不小心将这个文件 commit 并且也 push 了,那么远程仓库现在就会同时有 docke缓存视频变成本地视频rfileDdocker和虚拟机的区别ockerfile 两个文件。

解决core.ignorecase=false引发的灾难

如果发生了前文所说的google翻译问题也不要慌,凡事总是有解决方案的,不要急,慢慢来。具体的方案如下:

  1. 保持core.ignorecase=false这一配置项不变
  2. 在本机文件系统中手动windows系统删除 Dockerfile 这个文件
  3. git status 确定 dockerfileDockerfile 两个文件都已被删除
  4. commit 并且 push
  5. git checkout -- Dockerfwindows许可证即将过期怎么办ile 撤销对我们需要保持的那个文件的删除操作
  6. 现在设置 core.ignorecase=true

参考

  • How do I commit case-sensitive only filename changewindows许可证即将过期怎么办s in Git?
  • Git basics: Help my case-sensitive filename changes don’t commit
  • How to cwindows是什么意思hange the casing of a filename when using git on Windows

评论

发表回复