diff для исправления без переименования целевого файла - PullRequest
0 голосов
/ 09 марта 2012

как мне создать стандартный патч, используя diff -u, не используя другое имя для "нового" файла?

когда я отправил исправление для проекта Apache , коммиттер сообщил, что мне не нужно переименовывать файл при отправке исправлений.Я могу немного понять, как это нарушает исправление, так как имя «нового» файла должно как-то совпадать с именем цели исправления - однако они не могут находиться в одном каталоге с тем же именем.

это нормально (для простоты исправления) переименовать "старый" файл, так что я должен был использовать:

diff -u Source-old.java Source.java

вместо:

diff -u Source.java Source-new.java

* * 1014

1 Ответ

1 голос
/ 03 августа 2012

Учитывая существующий проект «a», скопируйте весь проект в «b», внесите изменения в «b».Создать diff между исходным каталогом и вашим скопированным каталогом.

Например, оформить заказ или загрузить проект в каталог 'a', скопировать в 'b':

$ tree a
a
`-- dir
    |-- Bar.java
    `-- Foo.java

$ cp -r a b 

$ tree b
b
`-- dir
    |-- Bar.java
    `-- Foo.java

Внести изменения в 'b' (и только 'b'):

$ diff -r -s a b
Files a/dir/Bar.java and b/dir/Bar.java are identical
Files a/dir/Foo.java and b/dir/Foo.java are identical

$ sed -i  's/Foo.*$/& \/* Change...*\//' b/dir/Foo.java 

$ diff -ruN  a b  | tee a.patch
diff -ruN a/dir/Foo.java b/dir/Foo.java
--- a/dir/Foo.java  2012-08-02 18:41:39.444720785 -0700
+++ b/dir/Foo.java  2012-08-02 18:46:45.319932802 -0700
@@ -1,2 +1,2 @@
 package dir;
-public class Foo {}
+public class Foo {} /* Change...*/

$ gzip a.patch

Другая альтернатива - сохранить исходный источник во временном локальном репозитории git, а затем использовать встроенный в git diff для генерации патча.Или лучше, если исходный источник использует git, а затем просто клонировать репо и работать непосредственно в самом дереве исходного кода и (все еще) использовать git для генерации патча.

...