Всегда не удается применить SVN-патч на удаленной машине с Linux - PullRequest
4 голосов
/ 18 сентября 2010

Мой типичный рабочий процесс выглядит так:

  1. Проверьте коды из багажника на моем компьютере с операционной системой Windows
  2. Сделайте некоторые исправления (но не фиксируйте SVN) и создайте патч этих модификаций, используя «Create Patch» Tortoise SVN.
  3. Войдите в SSH на удаленный сервер Linux и загрузите патч. На сервере linux также проверена магистраль HEAD.
  4. Примените патч на сервере Linux, например:
[work@remoteLinuxBox:~/work] patch -p0 -i ~/work/fix.patch
(Stripping trailing CRs from patch.)
patching file src/java/main/myApp/view/action/test/launch/GetPeekAction.java
Hunk #1 FAILED at 385.
1 out of 1 hunk FAILED -- saving rejects to file src/java/main/myApp/view/action/test/launch/GetPeekAction.java.rej
(Stripping trailing CRs from patch.)
patching file src/java/main/myApp/view/action/test/GetAllCustomerAction.java
Hunk #1 FAILED at 76.
1 out of 1 hunk FAILED -- saving rejects to file src/java/main/myApp/view/action/test/GetAllCustomerAction.java.rej
(Stripping trailing CRs from patch.)

Но у меня всегда были такие ошибки. Я думал, что это было вызвано тем, что конец строки отличается в Windows и Linux, поэтому я преобразовал патч с помощью dos2unix, предупреждение вроде (Удаление конечных CR из патча) исчезло, но исправление все равно не удалось.

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

Кто-нибудь знает, как решить эту проблему? Большое спасибо

Ответы [ 3 ]

4 голосов
/ 13 мая 2011

Используйте cygwin svn diff, чтобы избежать головной боли, убедитесь, что заголовок каждого блока имеет только LF в качестве окончания строки вместо CR + LF. Команда Linux patch не очень хорошо работает с заголовками блоков, имеющими окончания строк CR + LF. Мне патч TortoiseSVN / create не работает, потому что патчи, которые он создает, не являются кроссплатформенными.

3 голосов
/ 26 октября 2010

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

Моя рабочая копия имела Концы строк Windows (CR + LF), но после того, как я преобразовал затронутые файлы (в рабочей копии) в Концы строк Unix, исправление сработало! Проблема в том, что теперь мой инструмент сравнения файлов показывает, что файлы рабочих копий отличаются от хранилища в каждой отдельной строке - из-за разных концов строк. Я думаю, что я в конечном итоге преобразую весь репозиторий в окончания строк Unix, если Windows сможет справиться с ними.

Надеюсь, это поможет.

2 голосов
/ 04 июня 2012

Вы можете попробовать добавить «-l --binary» к команде исправления, например:

    patch -p0 -l --binary < patch.diff
...