Как применять git diff - двоичные патчи без установленного git? - PullRequest
13 голосов
/ 16 декабря 2009

Я использую 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 на сервер?

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

Спасибо

Ответы [ 4 ]

6 голосов
/ 16 декабря 2009

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

2 голосов
/ 23 ноября 2010

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

2 голосов
/ 16 декабря 2009

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

Для достижения цели вы можете:

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

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

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

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

...