Замените все строки идентификаторов CVS рекурсивно в файлах в репозитории GIT

Как я могу достичь цели, чтобы заменить следующие строки идентификаторов CVS стиля

<?php // $Id: index.php,v 1.123.5.56 2000/01/01 11:11:11 user Exp $

в

<?php // $Id$

рекурсивно во всех файлах расширений .php .class в GIT-репозитории.

Моя проблема:
У меня есть два репозитория GIT с более чем тысячами PHP-файлов.

  1. Репо один содержит оригинальный код PHP с нерасширенным CVS
    твенное.
  2. Второй репо содержит модифицированный код php с расширенными идентификаторами CVS + много модификаций мной.

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

Решения, которые я пробовал БЕЗ удовлетворительного результата:

  • Я попытался GIT решение с пятнами & чисто, но не имело реального успеха.
  • Я написал сценарий Perl для замены (сокращения) строк идентификаторов CVS, но после этого у меня было много изменений в репозитории 2, которые все должны были разрешать конфликты один за другим.

0

Решение

В Perl вы можете использовать File::Find::Rule найти все соответствующие файлы в хранилище. Затем скопируйте файлы в файл резервной копии перед выполнением замены:

use strict;
use warnings;

use File::Find::Rule;

File::Find::Rule->new
->file
->name(qr/\.(php|class)$/)
->exec( \&do_replacement )
->in('.');

sub do_replacement {
my ( $fn, undef, $full_path ) = @_;

$^I = '.bak';  # suffix of backup file
local @ARGV = ( $fn );
while (<>) {
s{<\?php\s*//\s*\$Id:.*?\$}{<?php // \$Id\$}g;
print;
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]