Как принять ревизию из файла diff?

Для одного проекта я использовал Latex и напечатал отчет, и теперь мой профессор отправил мне файл «revision.diff», который показывает всю разницу, которую она сделала в моем файле report.tex. Мне интересно, есть ли способ принять изменения в файле diff?

Я предполагаю, что вы на какой-то unix-машине (то есть Linux или Mac).

Стандартный способ использования diffs – с программой patch ( git использует тесно связанный формат, поэтому вы можете использовать git , но patch почти наверняка будет присутствовать на вашей машине и будет более простым).

Во-первых, убедитесь, что вы начинаете с той же версии вашего .tex-файла, которую получил ваш профессор.

затем

 % patch <revision.diff 

… это короткий ответ.

К сожалению, нет абсолютно стандартного способа создания патчей, не в последнюю очередь потому, что существует несколько более или менее стандартных способов форматирования diff. Таким образом, есть некоторые потенциальные осложнения.

Если файл патча начинает выглядеть примерно так

 2c2 < Blah blah --- > Blah blah wibble. 

или это:

 --- report.tex 2012-04-30 21:05:51.000000000 +0100 +++ report-modified.tex 2012-04-30 21:06:08.000000000 +0100 @@ -1,5 +1,5 @@ \documentclass{article} -Blah blah +Blah blah wibble. 

… тогда вышесказанное будет работать.

Если он начнет выглядеть следующим образом:

 --- a/report.tex 2012-04-30 21:05:51.000000000 +0100 +++ b/report.tex 2012-04-30 21:06:08.000000000 +0100 @@ -1,5 +1,5 @@ \documentclass{article} -Blah blah +Blah blah wibble. 

(обратите внимание на a/ и b/ вверху), тогда вам придется использовать

 % patch -p1 <revision.diff 

-p1 удаляет 1 'уровень' косых -p1 из имен файлов, упомянутых в верхней части файла.

Это в основном это. См. Патч (1) (то есть manpage для команды patch) для более подробного обсуждения. В частности, любой, кто отправляет исправления таким образом, должен читать и переваривать «заметки для отправителей патчей» в нижней части патча manpage.

Если вы начинаете с немного другой версии вашего report.tex чем тот, который вы отправили своему профессору (мораль этой части истории, используйте систему управления версиями и отметьте теги или сохраните ноты версии, которую вы отправили) то команда patch сообщит об ошибках и сделает что-то вроде создания файла с именем report.tex.rej в том же каталоге. Это должно позволить вам объединить соответствующие изменения и применить их вручную.

Является ли это стандартным унифицированным файлом в формате diff? Если это так, используйте git apply revision.diff для применения исправления.