Выполнение diff / st и игнорирование первой строки, если она соответствует определенному критерию - PullRequest
1 голос
/ 05 октября 2010

В репозитории для известного проекта с открытым исходным кодом все файлы содержат строку версии с отметкой времени в качестве первой строки:

<?php  // $Id: index.php,v 1.201.2.10 2009-04-25 21:18:24 stronk7 Exp $

Даже если я не совсем понимаю, почему они это делают - поскольку файлы уже находятся под контролем версий - мне придется с этим смириться.

Основная проблема состоит в том, что если я пытаюсь выпустить 'st' или 'diff' релиз, чтобы получить представление о том, что было изменено по сравнению с предыдущим, каждый отдельный файл, содержащийся в репозитории, явно помечается как измененный, и различия нечитаемый и неуправляемый.

Мне интересно, есть ли способ игнорировать первые строки, выполняющие diff / st, когда они соответствуют регулярному выражению.

Проект находится в cvs - cvs, да, вы правильно прочитали - и включен в большой ртутный репозиторий.

Ответы [ 2 ]

2 голосов
/ 05 октября 2010

Я не знаю о cvs, но с hg вы можете использовать любой внешний инструмент сравнения с прилагаемым расширением extdiff , и любой современный инструмент должен иметь возможность игнорировать различия, которые соответствуютопределенные шаблоны.

Клянусь Beyond Compare , что позволяет определять произвольный синтаксис.

kdiff3 имеет команд препроцессора , через которые вы можете передать ввод.

1 голос
/ 05 октября 2010

Если вы попробуете

man diff

, вы найдете

--ignore-matching-lines=RE Ignore changes whose lines all match RE.

Поиск "игнорировать совпадающие строки" в Интернете приводит примеры:

diff--unified --recursive --new-file --ignore-Match-lines = '[$] Автор. [$]' --ignore-Match-lines = '[$] Дата. [$] '...

(http://www.cygwin.com/ml/cygwin-apps/2005-01/msg00000.html)

Таким образом попробуйте:

diff --ignore-matching-lines='[<][?]php  [/][/] [$]Id:'
...