Использование NUL dir на Windows испортило мой Git

У меня был этот код работает в базе кода Node.js некоторое время:

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

он поместил файл-призрак ('NUL') на мою машину в корне проекта, и я не могу его ни удалить, ни удалить навсегда. Наличие этого файла, кажется, делает git очень ненадежным; коммиты, похоже, не работают полностью.

Кто-нибудь знает, что с этим делать?

0 ответов

Хорошая новость: это больше не испортит ваш Git.
Потому что с Git 2.25 (Q1 2020) Git будет запрещать пути, которые файловая система платформы не может отображать в MinGW.

См. Commit 4dc42c6, commit 98d9b23 (21 декабря 2019 г.) Йоханнес Шинделин (dscho).
(Слияние Junio ​​C Hamano -gitster- в коммите 13432fc, 02 января 2020 г.)

mingw: отказываться от путей, содержащих зарезервированные имена

Подписано: Йоханнес Шинделин

Есть несколько зарезервированных имен, которые не могут быть именами файлов в Windows, например AUX, NULи т. д.
Почти полный список см. в разделе " Присвоение имен файлам, путям и пространствам имен:" Соглашения об именах "".

Если попытаться создать каталог с именем NUL, он действительно будет "успешным", то есть вызов вернет успех, но ничего не будет создано.

Хуже того, даже добавление расширения файла к зарезервированному имени не делает его допустимым именем файла.
Чтобы понять причину такого поведения, см. " Что делать с такими зарезервированными именами файлов, какNUL а также CON?"от Раймонда Чена.

Давайте просто запретим их все.


Git 2.27 (второй квартал 2020 г.) исправляет еще одну проблему с COM0.

См. Commit 3efc128 (9 апреля 2020 г.) и commit b6852e1 (8 апреля 2020 г.) Йоханнес Шинделин (dscho).
См. Commit a748f3f (8 апреля 2020 г.) Маттиас Асхауэр (rimrul).
(Слияние Junio ​​C Hamano -gitster- в коммите b3eb70e, 22 апр 2020 г.)

mingw: не лечить COM0 как зарезервированное имя файла

Подписано: Йоханнес Шинделин

В 4dc42c6c186 ("mingw: отказаться от путей, содержащих зарезервированные имена ", 2019-12-21, Git v2.25.0-rc1 - merge), мы начали запрещать зарезервированные имена файлов, напримерNUL, CONOUT$, так далее.

Это включало COM<n> где <n> это цифра.

К сожалению, сюда входят COM0 но только COM1,..., COM9 зарезервированы, согласно официальной документации, COM0упоминается в разделе "Пространства имен NT", но явно опущено в списке зарезервированных имен: https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file

Тесты подтверждают это: вполне возможно написать файл с именем com0.c в Windows 10, но не com1.c.

Итак, давайте ужесточим код, чтобы запретить только зарезервированные COM<n> имена файлов, но разрешить COM0 еще раз.

Это исправляет git-for-windows/gitпроблема 2470 "Невозможно добавить файлCOM0.c или кассовая ветка, содержащая COM0.c файл".

Другие вопросы по тегам