git 想要添加已跟踪的文件

git wants to add already tracked files

我在 PC 上有一个大小约为 70GB 的存储库,当我将其复制(不是克隆,只是简单复制)到我的 mac 时,它显示某些文件未被跟踪,而它们已经被跟踪。

当我添加它们时,它们似乎在回购对象信息中重复,但在工作树中当然没有。所以我对上次提交进行了硬重置,但文件再次显示为未跟踪。

我该如何解决这个问题? (知道pc上的repo运行良好)

建议:压缩成zip文件后尝试压缩

不要将存储库的工作目录从一台计算机复制到另一台计算机。

问题

您的工作目录已检出适当行尾的文件。您的 Windows 机器使用回车符 return 和换行符来指示换行符,而您的 Mac 没有。 You should have configured 您的 PC 在您的存储库中进行行结束转换。将文件从 Windows 复制到 Mac 会将具有 Windows 样式行结尾的文件引入到 Mac,它们不属于这些文件。

Git 已决定您的文件有 未暂存的更改 [1] 因为您的行尾配置指示您的客户端在存储库中保留 Unix 样式的行尾并且在签出文件时转换为正确的行结束格式。这意味着当您在 PC 上检出文件时,它们被转换为 Windows 样式的行结尾。但是您的 Mac 希望 不会 改变存储库的行尾。

因此您的存储库包含 Unix 格式的文件,而您的 Mac 包含 Windows 格式的文件。因此,当您 运行 git status、Git 意识到工作目录中的文件与存储库中的文件不同时。 (仅行尾不同)并告诉您文件有未暂存的更改。

其他问题

不将存储库从一台计算机复制到另一台计算机还有其他原因。 Git 检测创建或克隆存储库时计算机的行为(通过 git initgit clone)。有关系统的数据,例如文件系统是区分大小写还是不区分大小写,以及文件系统是否支持符号链接,都存储在存储库的配置中。

如果您要将带有工作目录的存储库从 Windows 计算机复制到 Mac,您的存储库将不再支持符号链接。从 Mac 到 Linux 机器,您的存储库会变得非常混乱,因为它认为它不区分大小写。

最后,即使您在同一类型的计算机上复制存储库 - 甚至是同一台计算机本身 - 您也可能 运行 遇到问题。 Git 在索引中缓存一些工作目录信息。复制工作目录 应该 使该缓存无效, 复制后,这会给出错误信息。

解决方案

这是少数 次您可能确实 想要删除存储库并重新开始的次数之一。您可以删除工作目录中的所有文件 清理您的配置。但在这一点上,将 git clone 这个存储库放到你的 Mac.

实际上要容易得多

由于存储库很大,如果您不想花费网络流量开销,您可以简单地从您复制的现有存储库中克隆。 (它将忽略错误配置的工作目录文件和错误的配置。)例如,如果您损坏的存储库位于 badrepo:

git clone badrepo goodrepo

[1]:术语:您的文件有 未暂存的更改,您的文件未未跟踪未跟踪 文件是那些尚未在存储库中的文件。