【问题标题】:Unable to index file无法索引文件
【发布时间】:2020-06-16 11:09:18
【问题描述】:

我已经用我正在运行的 git git version 2.16.2.windows.1 从 github 克隆了我的 repo。

但是,当我想提交它时,我收到以下错误:

error: open("src/hoc/Aux.js"): No such file or directory
error: unable to index file src/hoc/Aux.js
fatal: adding files failed

您可以在下面找到文件夹和文件内容:

任何建议我做错了什么?

感谢您的回复!

更新

请在下面找到git status 给我的信息:

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .gitignore
        README.md
        config/
        package-lock.json
        package.json
        public/
        scripts/
        src/

nothing added to commit but untracked files present (use "git add" to track)

更新 1

即使手动添加 src 文件夹,我仍然遇到同样的错误:

marcus@Marcus-PC MINGW64 ~/Desktop/Coding Projects/demo-react-burger-builder (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .gitignore
        README.md
        config/
        package-lock.json
        package.json
        public/
        scripts/
        src/

nothing added to commit but untracked files present (use "git add" to track)

【问题讨论】:

  • 你在做什么来提交你的工作?
  • @TimBiegeleisen git add -A -- . && git commit -m "message" && git push origin master...
  • @TimBiegeleisen 但是,该命令无法通过git add -A -- .,因为git commit 只是添加了一个空文件夹...
  • git status 是否表明文件实际上已被暂存?
  • @TimBiegeleisen 请看我的更新

标签: git


【解决方案1】:

this answer 上的 OP 评论揭示了原因:

我现在删除了aux.js,现在一切正常。

AUX 是 Windows 中的一个特殊文件名(继承自旧时代的 MS-DOS)。它是一个表示设备的特殊文件。虽然在其他操作系统(基于 Unix)上,特殊设备文件位于 /dev 目录中,但 MS-DOS(及其后续 Windows)识别任何目录中的名称并将其视为特殊文件。这当然发生在命令提示符中(为了与旧的 MS-DOS 程序兼容),但它似乎也发生在其他上下文中。

该名称在任何目录中都是特殊且可识别的,处理文件名的操作系统代码会忽略提供的aux.js 文件(及其路径)并将aux 处理为特殊设备文件AUX。字符大小写并不重要,在 Windows 文件系统上 auxAuxAUX 相同。因为它认为它找到了一个特殊的名称,所以它忽略了文件扩展名。

NULCONPRN 和其他特殊名称也会发生同样的情况。在此处查看完整列表:https://en.wikipedia.org/wiki/Device_file#MS-DOS

对此没有解决方案,只有变通方法。如果您被困在 Windows 上,或者项目是由同事在 Windows 上开发的,那么避免这种情况的唯一方法是避免使用这些特殊名称。 Aux 可能是 Auxiliary 的缩写。
使用更长的名称。


Microsoft 高级开发人员 Raymond Chen 于 2003 年在他的博客 "The Old New Thing" 上写的一篇有趣的读物(以及提供我在此答案中提供的信息的智慧来源)是 this article

【讨论】:

  • 哇。如果该文件实际上命名为aux,我可以理解为什么Windows 会出现问题,但是aux.js ......好吧,我将把它添加到我拒绝在Windows 上工作的一大堆原因中。 :-) 更严重的是:如果 Windows 一直认为aux.js 表示“设备aux”,那么文件是如何创建的?也许它没有——也许它在索引中但不在工作树中,并且结帐成功地将其写入AUX 设备?
  • @torek 我根据我的记忆(以及我链接到答案的维基百科页面)写了答案。你的评论让我怀疑,我启动了一台 Windows 7 计算机进行检查。我无法使用命令提示符创建文件Aux.jsecho 123 &gt; Aux.js 产生错误消息“系统找不到指定的文件。”。尝试重命名现有文件(在命令提示符中使用ren)会产生“存在重复文件名,或者找不到文件”...
  • 有趣。我知道git checkout 检查它是否成功地创建了输出文件,因为如果你设法将文件或子目录错误地添加到root,然后在你有的时候去检查一些东西,它会向你吐出一堆错误没有写文件的权限。所以初始结帐应该失败了。
  • ...我使用 Windows 资源管理器创建了一个新文件,然后我尝试将其重命名为 Aux.js(使用 Windows 资源管理器),结果是 “指定的设备名称无效”。但是,我能够使用 Cygwin bash (echo 123 &gt; Aux.js) 创建一个名为 Aux.js 的文件。它不受使用命令提示符或 Windows 资源管理器的任何修改的影响,因为它们在更改它时“找不到此项目”,但在目录列表中显示它时不会出现问题。这是 Windows :-(
  • 真的很有帮助。
【解决方案2】:

即使我也面临同样的问题,因为 Aux 是 Windows 中的一个特殊名称。 您可以将 Aux 文件重命名为“Auxiliary”,这无疑会起作用。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
相关资源
最近更新 更多