Мне нужно создать патч между различными версиями программного обеспечения в двух каталогах, и этот патч будет доставлен моему клиенту.Они должны иметь возможность применить этот патч к более старой версии, чтобы обновить его до более новой версии.Из-за требований безопасности (ищите вредоносный код и т. Д.), Я должен прочитать каждую строчку этого патча своими собственными глазами.Мне бы не хотелось читать весь удаленный код, потому что, если есть 150 тыс. Удаленных строк и 100 тыс. Добавленных строк, я должен прочитать 250 тыс. Строк, когда действительно стоит прочитать только 100 тыс.
В настоящее время я создам патч, используя:
diff -N -r --unified=1 old new > patch.diff
Затем патч применяется, используя:
cp -r old new
cd new
patch -N -p1 < ../patch.diff
В качестве примера, у меня есть такая структура каталогов:
[user@hostname test]$ tree -af
.
├── ./new
│ ├── ./new/a.txt
│ ├── ./new/b.txt
│ └── ./new/c.txt
└── ./old
├── ./old/a.txt
└── ./old/c.txt
В новой версии был добавлен новый файл b.txt, был изменен a.txt, и в c.txt были удалены все строки, но он все еще существует.Запуск моего текущего создания патча приведет к следующему различию:
[user@hostname test]$ diff -N -r --unified=1 old new
diff -N -r '--unified=1' old/a.txt new/a.txt
--- old/a.txt 2019-07-01 18:09:59.586410797 -0400
+++ new/a.txt 2019-07-01 18:17:19.680446218 -0400
@@ -3,2 +3,3 @@
a
+h
a
@@ -8,2 +9,3 @@
a
+awdwd
a
@@ -11,23 +13,5 @@
a
-a
-a
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
-b
b
+foo
+bar
b
@@ -39,2 +23,9 @@
c
+d
+d
+d
+d
+d
+d
+d
diff -N -r '--unified=1' old/b.txt new/b.txt
--- old/b.txt 1969-12-31 19:00:00.000000000 -0500
+++ new/b.txt 2019-07-01 18:10:52.943204070 -0400
@@ -0,0 +1 @@
+this is an entirely new file
diff -N -r '--unified=1' old/c.txt new/c.txt
--- old/c.txt 2019-07-01 18:16:11.820985994 -0400
+++ new/c.txt 2019-07-01 18:14:59.775620402 -0400
@@ -1 +0,0 @@
-this is a file that will be empty in the new version
В идеале, мне не нужно читать все удаленные строки "b" в a.txt.Файл исправления может просто указывать номера строк, которые нужно удалить без их содержимого, или, может быть, складывать целые удаленные разделы больше N - для меня это не имеет значения, если исправление все еще можно безопасно применить.