Недопустимая последовательность байтов в имени файла при проверке ветки git - PullRequest
0 голосов
/ 10 января 2019

Я использую git в cli для изменения текущей ветви:

git checkout dev
и это производит:

fatal: невозможно создать каталог в 'app / src / androidTest / java? Com': недопустимая последовательность байтов

Как ответили в этом вопросе и этот , я попытался:

LC_ALL=C git checkout dev

или

LC_CTYPE=C git checkout dev
но я получаю ту же ошибку, как показано выше.

Бег:

git status

показывает, что некоторые файлы были изменены checkout, но я все еще на ветке master.

Как удалить файл, вызывающий проблемы, или как оформить ветку без этой ошибки?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Я нашел несколько файлов в различных проектах github, которые не совместимы с той или иной операционной системой. Например, файлы с расширением ".nul" или ".con" очень болезненны для Windows. Это не проблема исключительно для мерзавца. Например, Subversion будет прерывать работу, если не сможет восстановить файл по локальным причинам.

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

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

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

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

Конечно, это работает, только если папка некритична, например некоторые тестовые файлы.

Альтернативой является частичная проверка всех, кроме файла проблемы, но это может быть утомительной последовательностью проверок. Но вы можете использовать эту атаку для восстановления остальной части папки, которую вы пропустили, используя вышеописанную технику. Либо локально перетащите файлы из zip-файла, если они некритичны.

0 голосов
/ 10 января 2019

Локаль влияет только на то, как все отображается. Если имя файла содержит символ, который не разрешен файловой системой, никакая настройка языка не сможет это исправить.

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

Вероятно, в качестве обходного пути, создайте виртуализированный хост с базовой системой Linux, отформатированной так, чтобы разрешать 8-битные имена файлов старого стиля (Latin-1 или CP1252, если вы можете жить с неприятным привкусом Windows), проверьте файл там, переименуйте и передайте переименование обратно к git. Вы по-прежнему не сможете проверить версии дерева исходных текстов до переименования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...