Почему патч отклоняет мой патч-файл на рабочей копии SVN? - PullRequest
10 голосов
/ 14 января 2011

У меня есть такой патч-файл:

Index: dir/file.xml
===================================================================
--- dir/file.xml    (revision 178)
+++ dir/file.xml    (working copy)
@@ -7,7 +7,7 @@
    <markup>
-   <markup />
+   <markup></markup>
    <markup>
    <markup>
@@ -20,6 +20,7 @@
    <markup>
    <markup>
+   <tag>
    <markup>

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

$ svn copy -r 178 trunk/component/dir branches/mybranch

Затем я попытался

$ cd branches/mybranch
$ ls -R
./dir:
file.xml
$ patch -p0 -i ~/patchfile.patch

но вывод SVN

(Stripping trailing CRs from patch.)
patching file dir/file.xml
Hunk #1 FAILED at 7.
Hunk #2 FAILED at 20.
2 out of 2 hunks FAILED -- saving rejects to file dir/file.xml.rej

для каждого файла?

Что может заставить SVN отклонить исправление?Я на UNIX-машине, но у патча и репозитория есть окончания Windows ...

Спасибо за помощь!

Ответы [ 3 ]

8 голосов
/ 19 января 2011

Совет dos2unix не был плохим, но не решил проблему, как предлагалось.

Что я сделал для исправления всех файлов:

$ cd branches/mybranch
$ sudo apt-get install tofrodos
$ fromdos ~/patchfile.patch
$ fromdos */*
$ patch -p0 -i ~/patchfile.patch
$ todos */*

Таким образом, в принципе patch, похоже, имеет проблему с обработкой CR/LF строк в Unix. Преобразование в LF, затем исправление и преобразование обратно после исправления помогло.

Кредиты Стефану.

1 голос
/ 14 января 2011

вы можете попробовать инструмент dos2unix в файле патча. Это преобразует окончания строки.

0 голосов
/ 15 января 2011

Отредактировано: Итак, мы установили, что patch не является инструментом SVN.SVN не имеет на это никакого прямого влияния, если только он не создал файл патча неправильно.

Вы уверены, что файл патча был создан из транка?Если это так, ваша копия должна быть идентична той, на которой основывалось исправление, поэтому не должно быть причин для ее отказа.Единственный вывод, который я могу придумать, - это что-то не так с файлом патча;он не соответствует вашему файлу.

Убедитесь, что dir / file.xml в вашей рабочей копии действительно содержит

  <markup>
  <markup />
  <markup>
  <markup>

, начиная со строки 7. (Я предполагаю код в вашем вопросев любом случае это просто отредактированная копия, потому что там должно быть 7 строк, а не 4.) То есть содержимое файла соответствует содержимому патча?Обратите особое внимание на интервалы и окончания строк.Если это произойдет, то не должно быть никаких причин, по которым патч не сможет работать с этим ломом.

...