문제

우리의 코드는 C ++이며 SVN에서 관리됩니다. 개발은 Visual Studio와 관련이 있습니다. 아시다시피 Visual Studio C ++는 파일 이름과 불행히도 우리의 코드에 민감하지 않습니다.

아니요 우리는 응용 프로그램을 Linux + GCC로 포팅하고 있습니다. ~이다 사례에 민감합니다. 여기에는 많은 파일 이름과 파일 변경이 포함됩니다. 우리는 별도의 지점에서 개발을 계획했습니다.

SVN Rename은 잘 알려진 문제가있는 것으로 보입니다 (여기 그리고 여기). 해결 방법이 있습니까? git-svn 또는 svnmerge가 여기서 도움을 줄 수 있습니까?

감사합니다 Dima

도움이 되었습니까?

해결책

사례 민감도 문제는 Visual Studio vs. GCC에 관한 것이 아니라 파일 시스템에 관한 것입니다. Windows 및 Mac OS X (Windows 용 FAT32 및 NTFS, Mac OS X의 HFS+)의 표준 파일 시스템은 사례가 있지만 사례 보존이지만 Linux 파일 시스템 (Ext2, Ext3 및 Ext4)은 사례에 민감합니다. 모든 소스 파일에 대한 모든 소문자를 사용한 다음 분기를 사용한 다음 미래에 소문자를 사용하는 엄격한 정책과 ".cpp"확장자를 위해 파일 이름을 바꾸는 것이 좋습니다. 모든 헤더 파일의 모든 C ++ 소스 파일 및 ".h". 지점 전에이 이름을 변경할 수없는 이유가 있습니까?

다른 팁

git 자체는 휴리스틱 파일 컨텐츠 및 파일 이름 유사성 기반을 수행하여 합병 (그리고 거기에있을뿐만 아니라)으로 이름이 바뀌는 문제를 처리합니다 (매우 잘) 이름 바꾸기 탐지. Rename에 대한 정보가 Rename Tracking Solution과 같이 입력 한 이름에 대한 정보가 필요하지 않습니다.

여기에는 두 가지 질문이 있습니다. 하나는 Rename과 합병에 대한 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, ".");

다른 사람들이 말했듯이, 원래의 문제는 실제로 SCM과 관련이 없습니다. GIT 사용에 대해서는 GIT-SVN에서 병합을 수행하고 SVN 리포지토리로 다시 밀 수 있습니다.이 옵션이 일회성 옵션이라는 점을 미리 알고 있어야합니다. 즉, SVN 이이 커밋을 깨닫기를 기대하지 마십시오. 합병이거나 파일이 이름이 바뀌 었습니다. 진짜 주의 깊은.

"Really Cerful"옵션과 함께 부수적으로 git-svn을 올바른 "파일 이름 바꾸기"정보를 SVN에 푸시하는 유일한 방법은 안정적으로 작동하는 것처럼 보이는 것입니다. 어느 내용, 커밋 및 원하는 파일을 수정하고 다른 커밋을 수행하십시오. 커밋하기 전에 이름이 변경된 파일을 수정하면 git-svn은 파일에 ~할 것 같은 이동했지만 분명히이 정보를 SVN으로 다시 밀어 넣을만큼 자체 휴리스틱을 신뢰하지는 않습니다. 이 작업을 더 좋게 만드는 마법 옵션이 없을 가능성이 있습니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top