git отказывается исправлять ошибки с ошибкой & непризнанный вход & rdquo; [Дубликат]

В большинстве современных браузеров существует примитивный тип данных symbol , который можно использовать для создания перечисления. Это обеспечит безопасность типа перечисления, поскольку каждое значение символа гарантируется JavaScript, чтобы быть уникальным, то есть Symbol() != Symbol(). Например:

const COLOR = Object.freeze({RED: Symbol(), BLUE: Symbol()});

Чтобы упростить отладку, вы можете добавить описание к значениям перечисления:

const COLOR = Object.freeze({RED: Symbol("RED"), BLUE: Symbol("BLUE")});

Демонстрация плунжера

В GitHub вы можете найти оболочку, которая упрощает код, необходимый для инициализации перечисления:

const color = new Enum("RED", "BLUE")

color.RED.toString() // Symbol(RED)
color.getName(color.RED) // RED
color.size // 2
color.values() // Symbol(RED), Symbol(BLUE)
color.toString() // RED,BLUE

34
задан Sk8erPeter 2 December 2012 в 00:33
поделиться

6 ответов

Я не пользователь Windows, поэтому отвечай мой ответ с солью. Согласно Cookbook Windows PowerShell , PowerShell предварительно обрабатывает вывод git diff, разделяя его по строкам. Документация команды Out-File предполагает, что > совпадает с | Out-File без параметров. Мы также находим этот комментарий в документации PowerShell :

Результаты использования командлета Out-File могут быть не такими, какие вы ожидаете, если вы привыкли к традиционному перенаправлению вывода , Чтобы понять его поведение, вы должны знать контекст, в котором работает командлет Out-File.

По умолчанию командлет Out-File создает файл Unicode. Это лучший дефолт в долгосрочной перспективе, но это означает, что инструменты, которые ожидают файлы ASCII, будут работать неправильно с выходным форматом по умолчанию. Вы можете изменить выходной формат по умолчанию на ASCII с помощью параметра Encoding:

[...]

Out-file форматирует содержимое файла, чтобы он выглядел как консольный вывод. Это приводит к усечению вывода так же, как и в консольном окне в большинстве случаев. [...]

Чтобы получить результат, который не заставляет привязки строк соответствовать ширине экрана, вы можете использовать параметр Width для указания ширины линии.

So , по-видимому, это не Git, который выбирает кодировку символов, но Out-File. Это предполагает, a) что перенаправление PowerShell действительно должно использоваться только для текста и b) что

| Out-File -encoding ASCII -Width 2147483647 my.patch

избежит проблем с кодировкой. Однако это все еще не решает проблему с линейными окончаниями Windows и Unix. Есть командлеты (см. PowerShell Community Extensions ) для преобразования строк.

Однако, вся эта перекодировка не повышает мою уверенность в патче (который не имеет кодировки сама по себе, а просто строка байтов). Вышеупомянутая Cookbook содержит сценарий Invoke-BinaryProcess, который можно использовать для перенаправления вывода команды без изменений.

Чтобы обойти эту проблему, альтернативой будет использование git format-patch вместо git diff. format-patch записывает непосредственно в файл (а не в stdout), поэтому его вывод не перекодируется. Тем не менее, он может создавать патчи только от коммитов, а не от произвольных различий.

format-patch принимает диапазон фиксации (например, master^10..master^5) или одиночный фиксатор (например, X, то есть X..HEAD), и создает патч-файлов формы NNNN-SUBJECT.patch, где NNNN является увеличением 4-значного числа, и предметом является (искалеченный) объект патча. Выходной каталог можно указать с помощью -o.

16
ответ дан Ian Kemp 27 August 2018 в 07:47
поделиться

Как упоминалось Ларсом Нощинским, вам нужно исправить выход Out-File. Вы можете установить DefaultParameter Out-File, используя следующие команды.

$PSDefaultParameterValues['Out-File:Encoding'] = 'ASCII'
$PSDefaultParameterValues['Out-File:Width'] = '2147483647'

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

После добавив эти две строки в файл моего профиля, все работает так, как ожидалось.

λ git stash show -p > test3
C:\Users\..\Source\.. [master +1 ~0 -0 !]
λ git apply test3
C:\Users\..\Source\.. [master +1 ~2 -0 !]
0
ответ дан Console 27 August 2018 в 07:47
поделиться

В случае, если это поможет кому угодно, использование старой старой командной строки вместо PowerShell работает безупречно; он, похоже, не страдает от каких-либо проблем, присутствующих в PowerShell в отношении кодировки символов и EOL.

3
ответ дан Daniel Liuzzi 27 August 2018 в 07:47
поделиться

Если вы используете powershell, вы также можете просто сделать:

cmd /c "git diff > patch.diff"

Это заставляет команду запускаться через CMD, который записывает в выходной файл как есть.

5
ответ дан ddiukariev 27 August 2018 в 07:47
поделиться
  1. Выход Iconv diffs
  2. Для простых 7-битных патчей (чистый английский) вы можете игнорировать сумасшедшее обнаружение Notepad ++: patch-content не содержит определения charset
1
ответ дан Lazy Badger 27 August 2018 в 07:47
поделиться

Выполнение dos2unix на diff, создаваемом на PowerShell, кажется, делает трюк для меня. Затем я смог apply выполнить diff.

dos2unix.exe diff_file
git apply diff_file
1
ответ дан Vish 27 August 2018 в 07:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: