我在 Node.js 代码库中运行了一段时间:
if (os.platform() === 'win32') {
stdout = fs.openSync('NUL', 'a');
它在我的机器上将一个幽灵文件("NUL"(放在项目的根目录下,我无法 git rm 或永久删除它。拥有此文件似乎使 git 非常不可靠;提交似乎不能完全工作。
有人知道这是怎么回事吗?
好消息是:它不会再搞砸你的 Git。
因为,在 Git 2.25(2020 年第 1 季度(中,Git 将禁止平台文件系统无法在 MinGW 上表示的路径名。
请参阅提交 4dc42c6,提交 98d9b23(2019 年 12 月 21 日(,作者:Johannes Schindelin ( dscho
(。
(由Junio C Hamano -- gitster
-- 在提交 13432fc 中合并,2020 年 1 月 2 日(
mingw
:拒绝包含保留名称的路径签名:约翰内斯·辛德林
有几个保留名称不能是Windows上的文件名,例如
AUX
,NUL
等。
有关几乎完整的列表,请参阅"命名文件、路径和命名空间:'命名约定'"。如果尝试创建一个名为
NUL
的目录,它实际上会"成功",即调用将返回成功,但不会创建任何内容。更糟糕的是,即使将文件扩展名添加到保留名称也不会使其成为有效的文件名。
要了解该行为背后的基本原理,请参阅 Raymond Chen 的"如何处理那些保留的文件名(如NUL
和CON
("。让我们全部禁止它们。
Git 2.27(2020 年第 2 季度(修复了 COM0
的另一个问题。
请参阅提交 3efc128(2020 年 4 月 9 日(和提交 b6852e1(2020 年 4 月 8 日(,作者是 Johannes Schindelin ( dscho
(。
参见提交 a748f3f (08 Apr 2020( by Matthias Aßhauer ( rimrul
(。
(由Junio C Hamano -- gitster
-- 合并于 提交 b3eb70e,2020 年 4 月 22 日(
mingw
:不要将COM0
视为保留文件名签名:约翰内斯·辛德林
在 4dc42c6c186 ("
mingw
:拒绝包含保留名称的路径", 2019-12-21, Git v2.25.0-rc1 -- merge( 中,我们开始禁止保留的文件名,例如NUL
、CONOUT$
等。这包括
<n>
是数字的COM<n>
。不幸的是,根据官方文档,这包括
COM0
,但只有COM1
、...、COM9
保留,COM0
在"NT 命名空间"部分中提到,但它在保留名称列表中被明确省略:https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions测试证实了这一点:完全有可能在Windows 10上编写一个名为
com0.c
的文件,但不能com1.c
。因此,让我们收紧代码,仅禁止保留的
COM<n>
文件名,但再次允许COM0
。这修复了
git-for-windows/git
问题 2470"无法添加文件COM0.c
或包含COM0.c
文件的结帐分支"。