Я не пользователь 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 для указания ширины линии.
blockquote>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
.
Несколько советов:
pragma journal_mode
). Есть НОРМАЛЬНОЕ
, а затем ВЫКЛ
, что может значительно увеличить скорость вставки, если вы не слишком беспокоитесь о том, что база данных может быть повреждена в случае сбоя ОС. Если ваше приложение выйдет из строя, с данными все будет в порядке. Обратите внимание, что в более новых версиях настройки ВЫКЛ / ПАМЯТЬ
небезопасны для сбоев на уровне приложений. PRAGMA page_size
). Чем больше размер страницы, тем быстрее чтение и запись, так как большие страницы хранятся в памяти. Обратите внимание, что для вашей базы данных будет использоваться больше памяти. CREATE INDEX
после выполнения всех вставок. Это значительно быстрее, чем создание индекса с последующим выполнением вставок. INTEGER PRIMARY KEY
, если это возможно, что заменит подразумеваемый столбец с уникальным номером строки в таблице. Массовый импорт, по-видимому, лучше всего работает, если вы можете фрагментировать операторы INSERT / UPDATE . Значение 10 000 или около того хорошо сработало для меня в таблице с несколькими строками, YMMV ...