2017-04-20 80 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; 
    } 
}