在Windows上使用NUL dir搞砸了我的Git



我在 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上的文件名,例如AUXNUL等。
有关几乎完整的列表,请参阅"命名文件、路径和命名空间:'命名约定'"。

如果尝试创建一个名为 NUL 的目录,它实际上会"成功",即调用将返回成功,但不会创建任何内容。

更糟糕的是,即使将文件扩展名添加到保留名称也不会使其成为有效的文件名。
要了解该行为背后的基本原理,请参阅 Raymond Chen 的"如何处理那些保留的文件名(如 NULCON("。

让我们全部禁止它们。


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( 中,我们开始禁止保留的文件名,例如 NULCONOUT$等。

这包括<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文件的结帐分支"。

最新更新