Как установить git diff -binary патчи без git?

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

Локально я запускаю:

git diff --no-prefix HEAD~1 HEAD > example.patch

Загрузите example.patch на удаленный сервер и запустите:

patch --dry-run -p0 < example.patch

Если сухая работа выполнена успешно, я запускаю:

patch -p0 < example.patch

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

git diff --no-prefix --binary HEAD~1 HEAD > example.patch

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

Как я могу применить эти двоичные файлы патчей, не установив git сервер?

Я хотел бы поддерживать способность использовать сухой ход.

Спасибо

Ответы

Ответ 1

Для странного ответа, что вы можете сделать, это использовать sshfs, чтобы смонтировать удаленную систему там, где у вас есть git, а затем выполните ваши команды таким образом. Подходите к проблеме из другой системы координат: вместо того, чтобы задаваться вопросом, как запускать команды там, где нет инструмента, почему бы не создать среду, в которой данные поступают на ваш инструмент (через sshfs?)

Ответ 2

Во многих ситуациях и в этом случае вы не можете создавать данные с помощью более продвинутого инструмента и использовать его с менее продвинутыми. Это счастливое совпадение, что patch работает для не двоичных git -diffs. git diff вводит расширение стандартного diff.

Чтобы достичь цели, вы можете:

  • установите git в систему назначения (что на самом деле лучший подход)
  • установить систему назначения на локальную, как говорит chiggsy
  • только scp/rsync новые файлы. Неплохо для маленьких.

Ответ 3

Согласно журнал изменений, мы можем ожидать версии патчей > 2.6.1 для поддержки GIT двоичных различий.

Ответ 4

Используйте этот

git apply example.patch
git add --patch
git commit

Вы можете опустить флаг -patch, но вы не увидите никаких изменений и проверьте процесс исправления.