В Windows git не может правильно обрабатывать файлы с тем же именем, но в другом регистре

Я использую git в окнах. В моем проекте я изменил регистр имени файла. После этого проверка предыдущих коммитов не удалась (команды находятся в Git Bash):

  mkdir repofoldercd repofoldergit init # создать пустую конфигурацию репогита core.ignorecase false # включить зависящие от регистра имена файлов #  create 'readme.txt' $ echo "blahblahblah"> readme.txt $ git add readme.txt $ git commit -m "+ readme.txt" # переименовать его в 'README.txt' $ git mv -f readme.txt README  .txt $ git commit -m "readme.txt => README.txt" $ git status В ветке master ничего не нужно фиксировать, рабочий каталог чистый $ git checkout HEAD ~ 1error: следующие неотслеживаемые файлы рабочего дерева будут перезаписаны проверкой: readme.txtPlease  переместите или удалите их, прежде чем переключать ветки. Прерывание  

Почему git не позволяет проверять предыдущие коммиты?

Вы сталкиваетесь с той же проблемой при удалении одного файла и добавлении другого с тем же именем, но в другом регистре. Независимо от того, сколько коммитов вы делаете: одна (удаление и добавление в одной фиксации) или две фиксации (в первой фиксации вы удаляете файл, во второй добавляете еще один).


0

В Windows git не может обрабатывать файлы с тем же именем, но в разных регистр правильно

Git в Windows не может с этим справиться, потому что сама Windows не может с этим справиться (выделено мной):

В рамках требований соответствия POSIX файловая система Windows NT (NTFS) обеспечивает соглашение об именах файлов и каталогов с учетом регистра. Хотя NTFS и подсистема POSIX хорошо справляются с чувствительностью к регистру, 16-разрядные приложения для Windows, MS-DOS, OS/2 и Win32 — нет.

По правде говоря, в Windows есть определенный уровень поддержки чувствительности к регистру NTFS, но это довольно ненадежно:

Однако, если вы попытаетесь открыть один из этих файлов в приложении Win32, таком как Блокнот, у вас будет доступ только к одному из файлов, независимо от регистра имени файла, которое вы вводите в диалоговом окне «Открыть файл».

Также существуют другие несоответствия. Командная строка Windows NT и диспетчер файлов правильно отображают имена файлов. Однако обычные команды, такие как COPY, не работают, когда вы пытаетесь получить доступ к одному или нескольким именам файлов, которые отличаются только регистром.

Улучшите этот ответ
отредактировано 20 июня ’20 в 9:12
Сообщество ♦
111 серебряных значков
ответил 9 июня ’15 в 16:39
  • Корень проблемы в том, что у меня только один файл в фиксации . Я не пытаюсь создать два файла с одним и тем же именем, но в разных регистрах. Поэтому не имеет значения, что NTFS не может хранить два файла с одинаковым именем, но в разных регистрах в одной папке. — Максим Суслов 10 июн 2015, в 8:35
  • @MaximSuslov, неважно, есть ли у вас «только один файл в [] фиксации». Windows не различает readme.txt и README.txt . Когда вы пытаетесь проверить свою старую фиксацию, Git пытается заменить один другим, но Windows этого не понимает. Это основная причина вашей проблемы. — Крис, 10 июня 2015 г., 11: 29
  • Но git reset --hard HEAD ~ 1 работает нормально! Почему git checkout HEAD ~ 1 не работает? — Максим Суслов, 10 июн., 15:16
  • @MaximSuslov, я не знаю, почему работает reset --hard . Вероятно, это как-то связано с реализацией двух команд. Но неспособность Windows различать файлы с одинаковыми именами, за исключением регистра, является основной причиной, и у вас будут проблемы с этим, если вы продолжите работать в Windows. — Крис 10 июн 2015, в 19:18
добавить комментарий |

В Windows git не может правильно обрабатывать файлы с тем же именем, но в другом регистре

Git в Windows не может справиться с этим, потому что сама Windows не может справиться с этим (выделено мной):

В рамках требований соответствия POSIX файловая система Windows NT (NTFS) обеспечивает соглашение об именах файлов и каталогов с учетом регистра. Хотя NTFS и подсистема POSIX хорошо справляются с чувствительностью к регистру, 16-разрядные приложения для Windows, MS-DOS, OS/2 и Win32 — нет.

По правде говоря, в Windows есть определенный уровень поддержки чувствительности к регистру NTFS, но это довольно ненадежно:

Однако, если вы попытаетесь открыть один из этих файлов в приложении Win32, таком как Блокнот, у вас будет доступ только к одному из файлов, независимо от регистра имени файла, которое вы вводите в диалоговом окне «Открыть файл».

Также существуют другие несоответствия. Командная строка Windows NT и диспетчер файлов правильно отображают имена файлов. Однако обычные команды, такие как COPY, не работают, когда вы пытаетесь получить доступ к одному или нескольким именам файлов, которые отличаются только регистром.



Почему у меня не может быть папка и файл с тем же именем?

I ‘ у меня никогда раньше не было этой проблемы, но по какой-то причине я не могу переименовать свою папку в packages/.

Это структура:

  root - packages_old/- packages  

Когда я пытаюсь переименовать папку с помощью Thunar, я получаю сообщение об ошибке о том, что файл уже существует . То же самое с mv :

  blender iso $ mv packages_old/packages/mv: доступ к `packages/': не к каталогу   

Почему я не могу переименовать свой файл и папку, чтобы они имели то же имя:

  root - packages/- packages  

Я клянусь , что делал это раньше.


В Unix почти все является файлом. Каталог — это особый тип файла, который с точки зрения пользователя может «содержать» другие файлы.

Ошибка Не каталог возникает, потому что ваш существующий файл не каталог, и поскольку каталог является типом файла, и в одном каталоге не может быть двух файлов с одинаковыми именами, операция не может быть выполнена.


2

Потому что, если бы вы могли сделать такую ​​вещь, жизнь программистов, таких как я, была бы несчастной, когда я пытаюсь перебирать файлы в каталог.

Для следующего псевдокода:

  isDir ('/path/to/same_file_and_folder_name')  

Должна ли ОС отвечать true или false?

Улучшите этот ответ
отредактировано 2 апреля 2015 г., в 16:37
iv>
Anthon
70.3k1919 золотых знаков136136 серебряных знаков204204 бронзовых знака
ответил 02 апр. в 15:21
  • Он должен просто вернуть «оба». — Anthon 02 апр., 15:47
  • 3
    isAlive («Кот Шредингера») 🙂 — G-Man говорит: «Reinstate Monica» 2 апреля 2015, 22:58
  • 2
    @ G-Man Тип логическое ожидалось, получен объект (обещание). — Скотт Янг 6 мая 2015, 17:09
добавить комментарий |

Потому что, если бы вы могли сделать такое, жизнь таких программистов, как я, была бы несчастной, когда я пытаюсь перебирать файлы в каталоге. .

Для следующего псевдокода:

  isDir ('/path/to/same_file_and_folder_name')  

Должна ли ОС отвечать правда или ложь?

Оцените статью
logicle.ru
Добавить комментарий