【Github】玩转Github系列之二——使用git时涉及的文件名大小写不敏感问题

简介: 【Github】玩转Github系列之二——使用git时涉及的文件名大小写不敏感问题

问题描述


由于Linux文件名区分大小写,而Windows不区分,在平时开发过程中,就会遇到各种关于文件名大小写的问题,如下面两种场景:


  • 1、git对文件名的大小写不敏感:


– 创建一个文件readme.md,提交到代码仓库;


– 接着在本地文件系统中将其修改为Readme.md;


– 接着去提交,发现代码没有变化,输入git status 也不显示任何信息。


  • 2、Windows对文件名大小写不敏感:


– 在Windows上git clone Linux内核源码时,会因为Windows不区分文件名的大小写遇到类似下面的问题:


git clone git@github.com:qxhgd/Reading-and-comprehense-linux-Kernel-network-protocol-stack-4.19.157.git
Cloning into 'Reading-and-comprehense-linux-Kernel-network-protocol-stack-4.19.157'...
remote: Enumerating objects: 2198, done.
remote: Counting objects: 100% (2198/2198), done.
remote: Compressing objects: 100% (2081/2081), done.
remote: Total 2198 (delta 111), reused 2190 (delta 106), pack-reused 0
Receiving objects: 100% (2198/2198), 7.56 MiB | 322.00 KiB/s, done.
Resolving deltas: 100% (111/111), done.
warning: the following paths have collided (e.g. case-sensitive paths
on a case-insensitive filesystem) and only one from the same
colliding group is in the working tree:
  'linux-net-kernel/net/netfilter/xt_DSCP.c'
  'linux-net-kernel/net/netfilter/xt_dscp.c'
  'linux-net-kernel/net/netfilter/xt_HL.c'
  'linux-net-kernel/net/netfilter/xt_hl.c'
  'linux-net-kernel/net/netfilter/xt_RATEEST.c'
  'linux-net-kernel/net/netfilter/xt_rateest.c'
  'linux-net-kernel/net/netfilter/xt_TCPMSS.c'
  'linux-net-kernel/net/netfilter/xt_tcpmss.c'


git对文件名的大小写不敏感


该问题,有两个解决方案。


  • 使用git的重命名操作,而非Windows文件系统的重命名操作


git mv OldFileName newfilename


  • 配置git对文件名敏感


git config core.ignorecase false


Windows对文件名大小写不敏感


这里仅以Win10为例来说明,Win7系统可参考后文参考资料《how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the-filesystem》。


  • 环境要求


以下条件,缺一不可:


Windows 10 四月更新(1803)


安装有 Linux 子系统,即 Windows Subsystem for Linux(WSL)


所在分区为 NTFS 格式


以管理员权限运行 PowerShell


  • fsutil命令开启大小写敏感:


fsutil.exe file SetCaseSensitiveInfo C:\Users\qxhgd\GitProject enable #假定需要操作C:\Users\qxhgd\GitProject目录


注意,该命令仅以目录为操作的最小粒度。


本文涉及命令汇总


  • git配置大小写


  • 命令方式:


git config core.ignorecase false       #git区分大小写
git config core.ignorecase true        #git忽略大小写
git config --unset core.ignorecase     #git忽略大小写
git config core.ignorecase             #查看是否区分大小写
git config --list                      #查看core.ignorecase参数的值


– 配置文件方式,修改.gitconfig:


[core]
    ignorecase = false


  • git配置忽略文件权限修改


git config --global core.filemode false


  • git重命名文件


git mv oldfile(旧文件名) newfile(新文件名)


  • win10配置大小写-使用fsutil命令:


fsutil.exe file SetCaseSensitiveInfo C:\Users\qxhgd\GitProject enable #打开文件名区分大小写
fsutil.exe file SetCaseSensitiveInfo C:\Users\qxhgd\GitProject disable #关闭文件名区分大小写


  • fsutil命令其他参数:


PS C:\Windows\system32> fsutil.exe
---- 支持的命令 ----
8dot3name         8dot3name 管理
behavior          控制文件系统行为
dax               Dax 卷管理
dirty             管理卷更改位
file              文件特定命令
fsInfo            文件系统信息
hardlink          硬链接管理
objectID          对象 ID 管理
quota             配额管理
repair            自愈管理
reparsePoint      重分析点管理
storageReserve    存储保留管理
resource          事务性资源管理器管理
sparse            稀疏文件控制
tiering           存储分层属性管理
transaction       事务管理
usn               USN 管理
volume            卷管理
wim               透明 wim 托管管理
PS C:\Windows\system32> fsutil.exe file help
---- 支持的 FILE 命令 ----
createNew                创建指定大小的新文件
findBySID                按安全标识符查找文件
layout                   查询有关该文件的所有可用信息
optimizeMetadata         优化文件的元数据
queryAllocRanges         查询文件的分配范围
queryCaseSensitiveInfo   查询目录的大小写信息
queryExtents             查询文件的范围
queryExtentsAndRefCounts 查询文件的范围及其相应的引用计数
queryFileID              查询指定文件的文件 ID
queryFileNameById        显示文件 ID 的随机链接名称
queryOptimizeMetadata    查询文件的优化元数据状态
queryValidData           查询文件的有效数据长度
setCaseSensitiveInfo     设置目录的大小写信息
setShortName             设置文件的短名称
setValidData             设置文件的有效数据长度
setZeroData              设置文件的零数据
setEOF                   为现有文件设置文件结尾
setStrictlySequential    将 ReFS SMR 文件设置为严格按顺序
PS C:\Windows\system32>


参考资料




相关文章
|
23天前
|
网络安全 开发工具 git
解决fatal:remote error:You can’t push to git://github.com/username/*.g
通过上述诊断与修复步骤,绝大多数的推送错误都能得到有效解决,确保您的Git工作流顺畅无阻。
24 1
|
1月前
|
Unix Shell 网络安全
git学习六:(bug总结)git@github.com: Permission denied (publickey).等
本文是关于解决在使用Git和GitHub时遇到的“git@github.com: Permission denied (publickey)”错误的指南。文章提供了详细的步骤,包括确认SSH Agent运行状态、检查密钥配置、确保密钥匹配、验证仓库URL、检查权限和代理设置,以及配置SSH文件。这些步骤帮助用户诊断并解决SSH认证问题。
89 0
|
2月前
|
开发工具 git 开发者
掌握版本控制的艺术:Git 与 GitHub 的高效使用指南
在软件开发中,版本控制对于代码管理和团队协作至关重要。本文详细介绍了 Git 的核心概念与命令,包括初始化、创建仓库、文件跟踪、分支管理和远程仓库操作。同时,探讨了如何利用 GitHub 进行项目组织、代码审查及自动化工作流。通过遵循最佳实践,如频繁提交、清晰的信息记录和合理使用分支,开发者可以提升工作效率和团队协作能力,确保项目的持续成功。
|
2月前
|
Shell 网络安全 开发工具
Git,GitHub,Gitee&IDEA集成Git
Git提交项目到GitHub简洁版、版本控制、安装、常用命令、分支、团队协作机制、Github、Gitee远程仓库、IDEA集成Git、IDEA集成Github、IDEA集成Gitee
Git,GitHub,Gitee&IDEA集成Git
|
2月前
|
Shell 网络安全 开发工具
fatal: unable to access 'https://github.com/wolfcw/libfaketime.git/': Encountered end of file
fatal: unable to access 'https://github.com/wolfcw/libfaketime.git/': Encountered end of file
|
4月前
|
网络安全 开发工具 git
【git】解决git报错:ssh:connect to host github.com port 22: Connection timed out 亲测有效
【git】解决git报错:ssh:connect to host github.com port 22: Connection timed out 亲测有效
1122 1
|
5月前
|
Shell 测试技术 网络安全
【GIT】如何在GitHub上向一个开源项目贡献代码?
【GIT】如何在GitHub上向一个开源项目贡献代码?
68 5
|
5月前
|
开发工具 git
【已解决】error: failed to push some refs to ‘git@github.com:BATdalao/Github-green.git‘
【已解决】error: failed to push some refs to ‘git@github.com:BATdalao/Github-green.git‘
|
4月前
|
网络安全 开发工具 git
使用git克隆仓库报错:Warning: Permanently added‘github.com’ to the .....(ssh )
所以,你可以安全地忽略这个警告,它不会影响到你使用git克隆仓库。如果你已经成功克隆了仓库,那么一切都在正常工作。如果你在克隆过程中遇到其他问题,那可能需要查看具体的错误信息来解决。
117 0
|
5月前
|
开发工具 git
出现“error: failed to push some refs to ‘https://github.com/****.git‘”,如何解决问题
出现“error: failed to push some refs to ‘https://github.com/****.git‘”,如何解决问题
591 1