2009-08-04 131 views
1

我們的代碼是C++,並在svn中進行管理。開發是用Visual Studio。正如你所知道的Visual Studio C++不區分大小寫的文件名和我們的代碼不幸「被利用」了這一點。svn重命名問題

不,我們正在將我們的應用程序移植到Linux + gcc,其中區分大小寫。這將涉及很多文件名和文件更改。我們計劃在單獨的分支進行開發。

似乎SVN重命名具有衆所周知的問題(herehere)。 有沒有辦法解決它? git-svn或svnmerge可以在這裏幫助嗎?

感謝 迪馬

回答

4

區分大小寫的問題不是有關Visual Studio與GCC,而是涉及到文件系統; Windows和Mac OS X上的標準文件系統(用於Windows的FAT32和NTFS,用於Mac OS X的HFS +)不區分大小寫,但保留大小寫,而Linux文件系統(ext2,ext3和ext4)區分大小寫。我建議你重命名你的文件,對所有源文件使用全部小寫字母,然後分支,當然 - 對於將來,有嚴格的使用小寫和「.cpp」擴展名的策略所有C++源文件和所有頭文件的「.h」。有什麼理由不能在分支之前進行這種重命名?

+0

這就是我們正在考慮的。我很高興如果SCM工具不會強制執行文件重命名的工作策略,這是SCM工具的「基本」任務 – dimba 2009-08-04 08:25:22

3

的Git本身涉及(非常好)與重命名的文件中合併(而不是隻有在那裏)做啓發式文件的內容和基於文件名相似重命名檢測問題。它不需要提供有關重命名跟蹤解決方案等重命名信息。

+1

天哪這是真的!這很容易... – flq 2009-10-11 15:57:42

1

這裏有兩個問題,一個是svn對重命名和合並的限制,在我看來,一旦決定使用svn進行項目,在中間切換版本控制軟件是不明智的。我會和其他開發人員進行交流,並制定鎖定整個項目和重新命名的循環。

在我來說,我解決了一個簡單的Perl腳本的頭文件的情況下,敏感的問題:它會修復回車和集包括小寫。 評論部分修復了包含。

#!/usr/bin/perl 
use strict; 
use warnings; 
# 
use File::Find; 
use File::Copy; 

sub wanted 
{ 
    if( m/\.c$/i || m/\.h$/i) { 
     my $orig = $_; 
     my $bak = $orig.".bak"; 
     my $dst = $orig; 
     system("fromdos",$orig) == 0 or die "fromdos: $?"; 
#  open(FH,'<',$orig) or die "open $orig: $!"; 
#  my @lines; 
#  while(my $line = <FH>) { 
#   if($line =~ m/(^#include\s+")([^"]+)(".*)$/) { 
#    print $line; 
#    my $inc = $2; 
#    $inc =~ tr/A-Z/a-z/; 
#    print "change to:\n"; 
#    print $1.$inc.$3."\n"; 
#    print "\n"; 
#    push @lines, $1 . $inc . $3."\n"; 
#   } else { 
#    push @lines,$line; 
#   } 
#  } 
#  close(FH); 
#  #move($orig,$bak) or die "move $orig to $bak: $!"; 
#  unlink($orig); 
#  open(FH, '>', $dst) or die "open $dst: $!"; 
#  print FH @lines; 
#  close(FH); 

    } 
} 

find(\&wanted, "."); 
+0

不,我們不打算更改SCM工具。我在談論git-svn,它被用作svn客戶端。感謝您的腳本,我將它合併到我的腳本中 – dimba 2009-08-04 08:50:03

1

正如其他人所說,真正的問題與SCMs無關。至於使用git,你可以在git-svn中進行合併,並將其推回到SVN回購 - 只是提前意識到這是一次性選項,也就是說,不要指望SVN意識到這個提交是一個合併,甚至文件被重命名 - 你會失去文件的歷史,除非你真的真的小心。作爲一個旁註「非常小心」選項旁邊的說明,讓git-svn推送正確的「文件重命名」信息到似乎可靠工作的svn的唯一方法是重命名git-svn中的文件而不更改任何任何內容,提交,然後修改任何你想要的文件並做另一個提交。如果您在提交之前修改重命名的文件,混帳SVN知道該文件還有可能被移動,但顯然並不信任自己的啓發式足以推動這個信息回SVN。這很可能是我失蹤了一些神奇的選項,使這項工作更好:)