2017-04-20 58 views
0

内的所有CVS的ident字符串我怎样才能达到目标,以取代下面的样式CVS的ident字符串在文件递归更换Git仓库

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

<?php // $Id$ 

递归在所有.PHP。 GIT存储库中的类扩展文件。

我的问题:
我有更多的千个PHP文件的两个GIT回购。

  1. 回购一个包含未展开CVS idents原来的PHP代码。
  2. 回购二包含修改后的PHP代码,扩展了CVS idents +我进行了很多修改。

当我想合并它们时,它会在扩展了CVS idents的文件上产生冲突。不过,我想忽略这些变化,因为我只想打扰那些真正的冲突,这些冲突发生在原始代码&我的修改之间。

解决方案我尝试没有满意的结果:

  • 我试着用涂抹&干净的一个GIT的解决方案,但没有真正的成功。
  • 我写了一个Perl脚本来替换(缩小)CVS标识字符串,但之后,我对repo 2进行了很多更改,这些都需要逐个解决冲突。
+0

您尝试过什么?你有什么问题? –

+0

编辑我原来的帖子,包括我的答案。 – klor

+0

运行Perl脚本后,为什么会有很多更改? –

回答

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; 
    } 
}