首页 > 解决方案 > 为什么我的 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

请注意,我将文件夹重命名为Lab03from lab03,因此暂存文件很好。但是,这个新文件夹Lab03没有显示在我的编辑器上,所以我看不到它。此外,即使我签出最新的提交,Lab03仍然没有出现。

谁能告诉我这是为什么?以及如何将其移动Lab3到我的工作目录以便我可以查看和编辑它?

提前致谢。

标签: git

解决方案


提示中的MBP表明您使用的是 MacBookPro,因此是 macOS。macOS 上的默认文件系统是保留大小写但不区分大小写的。这意味着如果您创建一个名为 的文件README.md,例如您在此处显示的文件,然后要求操作系统打开或创建一个名为readme.mdor的文件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

将向您的操作系统提供以下形式的命令:将文件夹重命名lab03Lab03为. 在我自己的 macOS 系统上进行的测试表明这是可行的。

在某些进行大小写折叠的系统上(不是我的,也可能不是你的),您可能不得不采取两个单独的步骤,例如:

mv lab03 tmp && mv tmp Lab03

以便中间名称不区分大小写与初始名称或最终名称匹配。例如,您将看到这种用于旧 Windows 系统的通用算法。


推荐阅读