Вопрос: Как добавить строки с помощью патча?


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

Исходный файл: test1.repo

исключить = Монго *

исключить = SQLite *

исключить = * PostgreSQL

Новый файл: test2.repo

исключить = Монго *

исключить = * PostgreSQL

исключить = MySQL *

Поэтому я запускаю команду diff -u test1.repo test2.repo > repo.patch чтобы найти различия, достаточно простые. Глядя на repo.patch файл, который я только что сделал, я вижу вывод:

исключить = Монго *

-exclude = SQLite *

исключить = * PostgreSQL

+ Исключить = MySQL *

Если я использую патч, хотя он будет писать с тем, что фактически является только данными, которые у меня есть test2.repo, Есть ли способ получить патч для только писать новые строки (все, начиная с +)? Я хотел бы добавить строки в исходный репозиторий, но не уничтожить любые настройки, которые они уже сделали с их файлом.


1
2018-04-16 15:53


Источник


Как насчет замены этих строк удаления в патче путем запуска, например. сценарий sed sed 's/^-\([^-]\{2\}\)/ \1/' в теме? - Jaap Eldering
Может работать для этого примера, но не удастся для строк, которые на самом деле начинаются с -- по какой-то причине. Лично я просто вручную редактирую патч, чтобы разобраться в конфликтах. - frostschutz
Вы можете использовать cat <(head -n 1 repo.patch) <(grep -ve '^-' repo.patch) | patch для решения проблемы, указанной в @frostschutz. Но с этими модифицированными файлами патчей я получаю ошибку patch: **** malformed patch at line 9: (это EOF), поскольку вам также необходимо изменить @@ -1,4 +1,6 @@ линии ?! - mpy
Вы правы @mpy, напрямую изменяя файл патча, как это, мне нужно будет также обновить линию ссылок на местоположение. Это легко сделать вручную, но мне нужно, чтобы весь процесс был автоматизирован, поэтому исходный вопрос. - Mono
Для данного ввода, sort -u test1.repo test2.repo может также работать. - frostschutz


Ответы: