git - 为什么我的 git '跟踪文件'没有显示在我的工作目录中?以及如何将其移回我的工作目录
问题描述
我有一个文件夹,我做了一些重命名和回滚操作。如果我运行git ls-files
,它将显示如下:
XinyuLi-MBP:CS1 xinyuli$ git ls-files
.gitignore
Lab01/README.md
Lab02/README.md
Lab03/README.md
README.md
以上很好,也是我最新的提交。
但是,它在我的工作树上显示的是:
XinyuLi-MBP:CS1 xinyuli$ ls
Lab01 Lab02 README.md lab03
请注意,我将文件夹重命名为Lab03
from lab03
,因此暂存文件很好。但是,这个新文件夹Lab03
没有显示在我的编辑器上,所以我看不到它。此外,即使我签出最新的提交,Lab03
仍然没有出现。
谁能告诉我这是为什么?以及如何将其移动Lab3
到我的工作目录以便我可以查看和编辑它?
提前致谢。
解决方案
提示中的MBP
表明您使用的是 MacBookPro,因此是 macOS。macOS 上的默认文件系统是保留大小写但不区分大小写的。这意味着如果您创建一个名为 的文件README.md
,例如您在此处显示的文件,然后要求操作系统打开或创建一个名为readme.md
or的文件ReadMe.md
,则操作系统将使用现有的文件命名README.md
。
同样的规则适用于目录或文件夹名称。(有些人更喜欢这个词directory,另一些人更喜欢folder ;两者都指同一个东西:一种容器类型的文件,其中包含更多文件。请注意,Git 的 index / staging-area ,如 所示git ls-files
,没有文件夹:它只是具有Lab01/README.md
包含嵌入斜杠的路径名。作为副作用,Git 必须在其内部文件名(具有这些嵌入斜杠)和您的操作系统的文件夹和文件方案之间进行转换。)
所有这一切意味着你有,不知何故——我们不知道如何;你必须自己找出来——lab03
在你的工作树中创建了一个名为的文件夹。任何使用该名称的尝试都Lab03
只是引用此现有lab03
文件夹。每次 Git 尝试使用类似 的名称Lab03/README.md
时,您的操作系统都会对自己说:啊哈,您的意思一定是您希望我创建或更新lab03/README.md
,而不是Lab03/README.md
. 所以 Git 不能做任何事情来修复小写名称。
不过,您可以:
XinyuLi-MBP:CS1 xinyuli$ mv lab03 Lab03
将向您的操作系统提供以下形式的命令:将文件夹重命名lab03
Lab03
为. 在我自己的 macOS 系统上进行的测试表明这是可行的。
在某些进行大小写折叠的系统上(不是我的,也可能不是你的),您可能不得不采取两个单独的步骤,例如:
mv lab03 tmp && mv tmp Lab03
以便中间名称不区分大小写与初始名称或最终名称匹配。例如,您将看到这种用于旧 Windows 系统的通用算法。
推荐阅读
- cobol - 创建 CSV 文档时如何删除空格
- java - 如何序列化和保存一堆对象?
- javascript - 如何检查是否至少有一个具有特定 url 的嵌套对象
- javascript - 如何自动播放音频?
- c# - Razor 引擎:在 & 的模板中生成 URL,生成 &
- python-3.x - 为什么即使我填充了年龄的空值,也没有填充它们?
- python - 熊猫删除具有多个字符串条件的行
- elasticsearch - elasticsearch搜索像sql中的“distint count”?
- rust - 库箱中多个可执行文件的文件布局
- python - 如何将函数应用于数据框中的所有列并在python中以数据框的形式输出