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