【问题标题】:using NUL dir on Windows messed up my Git在 Windows 上使用 NUL 目录搞砸了我的 Git
【发布时间】:2016-05-20 13:47:43
【问题描述】:

我让这段代码在 Node.js 代码库中运行了一段时间:

if (os.platform() === 'win32') {
    stdout = fs.openSync('NUL', 'a');

它在我的机器上的项目根目录下放置了一个 ghost 文件 ('NUL'),我无法 git rm 或永久删除它。有这个文件似乎使 git 非常不可靠。提交似乎无法完全正常工作。

有人知道这个是做什么用的吗?

【问题讨论】:

标签: node.js windows git fs dev-null


【解决方案1】:

好消息是:它不会再搞乱您的 Git。
因为在 Git 2.25(2020 年第一季度)中,Git 将禁止平台文件系统无法在 MinGW 上表示的路径名。

参见commit 4dc42c6commit 98d9b23(2019 年 12 月 21 日)Johannes Schindelin (dscho)
(由 Junio C Hamano -- gitster -- 合并到 commit 13432fc,2020 年 1 月 2 日)

mingw: 拒绝包含保留名称的路径

签字人:约翰内斯·辛德林

有几个保留名称不能是 Windows 上的文件名,例如 AUXNUL 等。
有关几乎完整的列表,请参阅“Naming Files, Paths, and Namespaces: 'Naming Conventions'”。

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

更糟糕的是,即使为保留名称添加文件扩展名也不会使其成为有效的文件名。
要了解该行为背后的基本原理,请参阅来自Raymond Chen 的“What's the deal with those reserved filenames like NUL and CON?”。

让我们都禁止它们。


Git 2.27(2020 年第二季度)修复了 COM0 的另一个问题。

请参阅commit 3efc128(2020 年 4 月 9 日)和 Johannes Schindelin (dscho)commit b6852e1(2020 年 4 月 8 日)。
请参阅 Matthias Aßhauer (rimrul)commit a748f3f(2020 年 4 月 8 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit b3eb70e,2020 年 4 月 22 日)

mingw: 不要将COM0 视为保留文件名

签字人:约翰内斯·辛德林

4dc42c6c186(“mingw:拒绝包含保留名称的路径”,2019-12-21,Git v2.25.0-rc1 -- merge)中,我们开始禁止保留的文件名,例如NULCONOUT$

这包括COM<n>,其中<n> 是一个数字。

不幸的是,这包括COM0,但只有COM1,...,COM9 被保留,根据官方文档,COM0 在“NT 命名空间”部分中提到,但它明确 从保留名称列表中省略https://docs.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 issue 2470“无法添加文件COM0.c 或包含COM0.c 文件的签出分支”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2022-01-05
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多