Как применить diff, сделанный Windows SVN на Linux? - PullRequest
9 голосов
/ 02 июля 2010

В Windows я создал многофайловый diff с:

svn diff > mydiff.diff

Затем переместил его на Linux-машину (с той же версией того же репо, без изменений).Как я могу это применить?После выполнения

 patch -p0 < mydiff.diff

я получаю следующий вывод:

patching file licstat/test/unittest/test_licstatactioncontainers.cpp
File licstat/test/unittest/test_licstatactioncontainers.cpp is not empty after patch, as expected
patching file licstat/test/unittest/test_licstatactions.cpp
Hunk #1 FAILED at 99.
1 out of 1 hunk FAILED -- saving rejects to file licstat/test/unittest/test_licstatactions.cpp.rej
can't find file to patch at input line 295
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: licstat/test/unittest/test_licenseserverusagemap.cpp
|===================================================================
|--- licstat/test/unittest/test_licenseserverusagemap.cpp       (revision 6767)
|+++ licstat/test/unittest/test_licenseserverusagemap.cpp       (working copy)
--------------------------
File to patch: 

И последняя строка - это приглашение в ожидании моего действия.

Как мне создать / применитьпатч, чтобы он работал?

(правка) Теперь я вижу, что файл отсутствует, и diff его не создал.После создания файла вручную я получаю такие ошибки:

patching file licstat/misc/generic/mysql/stored_procedures.sql
Hunk #1 FAILED at 220.
Hunk #2 FAILED at 245.
Hunk #3 FAILED at 622.
Hunk #4 FAILED at 661.
Hunk #5 FAILED at 810.
Hunk #6 FAILED at 822.
Hunk #7 FAILED at 868.
Hunk #8 FAILED at 999.
8 out of 8 hunks FAILED -- saving rejects to file licstat/misc/generic/mysql/stored_procedures.sql.rej

Ответы [ 4 ]

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

Использование "dos2unix" не поможет, если в ваших файлах в Linux есть перевод строки CR + LF.

Эта команда должна работать с любой комбинацией перевода строки:

patch -p0 -l --binary < patch.diff
0 голосов
/ 02 июля 2010

Я довольно регулярно исправляю файлы между системой Windows и Mac, и patch, похоже, правильно работает с символами новой строки, поэтому я не думаю, что это проблема. Похоже, вы удалили test_licstatactioncontainers.cpp, и первое предупреждение об этом. Второй, похоже, жалуется на отсутствие самого файла.

Может ли это быть проблемой с именем файла? Windows нечувствительна к регистру имен файлов, но linux - нет. На самом ли деле файл называется Test_LicenceServerUsageMap.cpp для Linux? Или каталог LicStat / Test?

0 голосов
/ 02 июля 2010

Попробуйте преобразовать окончания строк в файле исправления из DOS в Unix, используя команду dos2unix.

0 голосов
/ 02 июля 2010

Этот тип ошибки может возникать, когда локальный формат файла CRLF вместо LF, когда вы работаете в Unix-системе.

patch пытается адаптировать патч svn diff к формату файла Unix, но отключаетсякогда локальные файлы находятся в режиме dos, что может произойти при совместном использовании баз кода между досами и средами unix.

Для меня работает сначала преобразование всех файлов, которые могут быть затронуты, например:

grep ^+++ patchfile.patch | awk '{print $2}' | dos2unix

А затем применить патч:

patch -p0 < patchfile.patch
...