赞
踩
项目开发的时候给文件重命名是常见的操作。但如果仅仅是改变了大小写会怎样呢?
λ ls
README.txt
λ mv README.txt Readme.txt
λ git status
On branch master
nothing to commit, working tree clean
竟然完全不生效…
说到为什么会这样,不知道大家有没有注意到,windows文件系统是不区分文件大小写的。
比如当我要把如下一个文件命名为README.txt
,因为已经存在了一个Readme.txt
文件,所以这个操作是不被允许的。
所以windows下,git会在初始化仓库的时候自动配置.config
来让git的的文件大小写规则与系统一致。初始化的情况包含git init
以及 git clone
。以下我执行了git init 并查看默认配置:
没想到吧,Git默认已经把忽略大小写的这个选项ignorecase
设置为了true,也就是不区分大小写。(这个单词的意思是:是否忽略大小写
…设置为true,就是忽略的意思)
所以理论上,只要把他改回来就可以了。不妨试一下:
# 可以看到我已经设置为了false λ git config -l | grep "case" core.ignorecase=false # 新建一个文件 git touch README.txt # 添加并提交 git add . git commit -m "init"; # 重命名 mv README.txt Readme.txt # 可以看到已经检测到文件名发生改变了。 λ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) Readme.txt nothing added to commit but untracked files present (use "git add" to track)
但是,如果你以为这就完了就太天真了。其实呢,这是噩梦的开始。因为你刚才的提交因为不区分大小写,会导致git上产生两个文件。
λ git ls-files
README.txt
Readme.txt
想一想也应该是这样,不区分大小写嘛,但在NTFS这种不区分大小写的系统中你让人如何pull代码?两个文件要合并么?
所以团队中最好还是不要开这个…那么这个咋整呢,其实也很简单,不妨继续回退到开始的状态,我们只是想解决给README.txt重命名为Readme.txt而已。
回到开始的状态:
λ git status
On branch master
nothing to commit, working tree clean
# 开始的状态,我只有一个README.txt文件
λ ls
README.txt
只要使用git mv
的命令即可
λ git mv README.txt Readme.txt
C:\Users\Yanan\temp\temp7\temp7 (master)
λ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: README.txt -> Readme.txt
是不是检测到了重命名 本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/678889
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。