【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>


参考资料




相关文章
|
2天前
|
Linux 开发工具 git
蓝易云 - git及GitHub的使用
以上就是Git和GitHub的基本使用方法。
4 0
|
10天前
|
人工智能 Linux 开发工具
[oeasy]python018_ 如何下载github仓库_git_clone_下载仓库
在这个文档中,作者讨论了如何继续进行编程学习,特别是关于GitHub的使用。首先,回顾了从编写简单代码到管理大量代码的过程。然后,提到了通过“保存运行一条龙”操作来处理代码,以及GitHub作为全球最大的开源软件平台的重要性。在GitHub上,用户可以找到各种软件项目,包括Linux、Python和Blender等。 作者解释了GitHub的基本操作,如点赞(star)、 fork(复制项目)和watch(关注项目更新)。还介绍了如何下载项目到本地,通过`git clone`命令复制仓库的URL并将其粘贴到终端进行下载。如果遇到问题,可以尝试更换HTTP链接或等待一段时间重试。
191 1
|
18天前
|
开发工具 git
Git项目如何配置,如何上传至GitHub。其详细步骤
Git项目如何配置,如何上传至GitHub。其详细步骤
17 0
|
18天前
|
网络安全 数据安全/隐私保护
解决git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Pleas
解决git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Pleas
|
18天前
|
存储 开发工具 git
|
18天前
|
开发工具 数据安全/隐私保护 C++
vs2019中同步到github上的用户名错误_控制面板和vs的git全局设置重新登录
vs2019中同步到github上的用户名错误_控制面板和vs的git全局设置重新登录
18 0
|
18天前
|
前端开发 JavaScript 网络安全
Git(3) 使用Github管理项目
Git(3) 使用Github管理项目
28 0
|
18天前
|
开发工具 git
git如何创建新分支,GitHub默认分支是main怎么连上
git如何创建新分支,GitHub默认分支是main怎么连上
27 0
|
18天前
|
开发工具 git
对于github不同的分支main或者master,git拉取代码的时候怎么拉取不同分支的代码
对于github不同的分支main或者master,git拉取代码的时候怎么拉取不同分支的代码
27 1
|
18天前
|
Shell 开发工具 git
【Github】git bash将本地工程上传至github
【Github】git bash将本地工程上传至github