diff и patch используют неверное окончание строки при создании новых файлов или изменение конца строки - PullRequest
1 голос
/ 14 июля 2011

Я пытаюсь создать патч, используя diff, но я не могу заставить патч использовать символы конца строки, используемые в файлах при создании нового файла, или изменить конец строки, когда файл меняет его.В основном я делаю:

cp -r dir1 dir3
diff -ruN dir1 dir2 > dir3\patch.txt
cd dir3
patch -p1 < patch.txt

Все изменения между dir1 и dir2 применяются правильно, за исключением того, что символ конца строки для новых файлов по умолчанию равен CR+LF, даже там, где файлв dir2 использует LF в качестве маркера конца строки.Кроме того, любые файлы, в которых разница между ними заключается только в изменении конца строки, не исправляются каким-либо образом - diff, похоже, не видит никаких изменений.

Таким образом, запуск diff -rq dir2 dir3 дает кучу Files aaa and bbb differ, но diff -rwq dir2 dir3 работает нормально.

Я использую diff - GNU diffutils version 2.7 и patch 2.5 из UnxUtils в Windows XP.

Есть ли способ создания новых и измененных файловвключены в патч сохранить конец строки из исходного файла?

1 Ответ

1 голос
/ 14 сентября 2011

Это работает:

cp -r dir1 dir3
diff --binary -ruN dir1 dir2 > dir3\patch.txt
cd dir3
patch --no-backup-if-mismatch --binary -u -p1 < patch.txt

Не использовать флаг --binary означает, что файл анализируется построчно, игнорируя EOL.По некоторым причинам, он не всегда будет корректно исправляться (выдает сообщение Hunk #1 succeeded at 1 with fuzz 1.), поэтому мне пришлось включить --no-backup-if-mismatch, чтобы предотвратить создание файлов .orig.-u представляется необязательным, поскольку patch самостоятельно определяет тип исправления.

...