Использование вывода diff для создания патча
У меня есть что-то вроде этого
src/sim/simulate.cc
41d40
< #include "mem/mem-interface.h"
90,91d88
< dram_print_stats_common(curTick/500);
<
src/mem/physical.hh
52d51
< public:
55,56d53
< public:
<
58a56,57
> public:
>
61,62c60,61
< virtual bool recvTiming(PacketPtr pkt); //baoyg
<
---
Я считаю, что это было создано с помощью команды diff в исходном дереве. Я хочу создать патч, используя этот вывод, и применить те же изменения к моему исходному дереву.
Ответы
Ответ 1
Я считаю, что diff -u oldfile newfile > a.patch
используется для создания файлов патчей, хотя некоторые другие переключаемые могут быть выбраны также (-N?).
Изменить: ОК, 4 года спустя и, наконец, объясню, что означают переключатели:
-u
создает Unified diff. Унифицированные различия - это те различия, которые программа патчей ожидает получить в качестве входных данных. Вы также можете указать число после u
(мин. 3, значение по умолчанию 3), чтобы увеличить количество выводимых строк. Это в случае, если 3 строки не являются уникальными, чтобы точно определить только одно место в программе.
-N
обрабатывает отсутствующие файлы как пустые, что означает, что он создает много дополнительного контента, если один из файлов пуст (или см. следующую точку).
Кроме того, newfile
и oldfile
могут быть как каталогами, так и отдельными файлами. Вероятно, вам понадобится аргумент -r
для этого, чтобы перезаписать любые подкаталоги.
Ответ 2
Если вы хотите получить тот же файл патча, что и SVN diff, учитывая два разных файла:
diff -Naur file1.cpp file2.cpp
Ответ 3
У вас есть не унифицированный diff. patch может прочитать его, но не сможет выполнить контекстные совпадения и, скорее всего, допустит ошибки.
Ответ 4
Это (частично) файл патча, хотя было бы лучше, если бы они предоставили вам единый diff-выход.
Основная проблема с этим патчем заключается в том, что он не упоминает, какие файлы изменяются, а поскольку нет контекста, файлы должны быть точными, патч не сможет разрешить незначительные изменения в файле.
Ответ 5
Скопируйте diff из исходного сообщения в файл патча с именем test.patch
, затем запустите
patch <original file> test.patch
@Sparr и @Arafangion указывают, что это работает лучше всего, если у вас есть точный исходный файл, использованный для создания оригинального diff.