Использование 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
файл".