Pergunta

O nosso código é C ++ e é gerido no SVN. O desenvolvimento é com o Visual Studio. Como você sabe Visual Studio C ++ é caso insensível aos nomes de arquivos e nosso código infelizmente "explorado" esta pesadamente.

Não, nós estão portando a nossa aplicação para Linux + gcc, que é maiúsculas de minúsculas. Isto irá envolver um grande número de nomes de arquivos e alterações de arquivos. Nós planejamos fazer o desenvolvimento no ramo separado.

Parece que svn renomeação tem um problema bem conhecido ( aqui aqui ). Existe uma maneira de contornar isso? É git-svn ou svnmerge pode ajudar aqui?

Graças Dima

Foi útil?

Solução

A questão sensibilidade caso não é sobre Visual Studio GCC vs., mas sim sobre o sistema de arquivos; os sistemas de arquivos padrão no Windows e Mac OS X (FAT32 e NTFS para Windows, HFS + para Mac OS X), são caso insenstive mas caso preservando, ao mesmo tempo sistemas de arquivos Linux (ext2, ext3, e ext4) são maiúsculas de minúsculas. Gostaria de sugerir que você renomear seus arquivos, usando todas as letras minúsculas para todos os arquivos de origem, e em seguida, ramo, e - é claro - para o futuro, temos uma política estrita de usar letras minúsculas e uma extensão ".cpp" para tudo C ++ arquivos de origem e ".h" para todos os arquivos de cabeçalho. Existe alguma razão que você não pode executar esta renomeando antes do ramo?

Outras dicas

si Git lida (muito bem) com o problema de arquivos renomeados em fusões (e não só lá), fazendo conteúdos de arquivos heurísticas e semelhança filename base renomeação de detecção . Não exige ter informações sobre renomeações introduzidos como solução de rastreamento de mudança de nome.

Há duas questões aqui, é a limitação svn em renomeações e se funde, na minha opinião uma vez que se decidiu ir com svn para um projeto que não seria aconselhável software de controle de versão chave no meio. Eu ia falar com os outros desenvolvedores, e fazer ciclos de bloqueio de todo o projeto e fazendo as renomeações.

No meu caso eu resolvido os problemas maiúsculas e minúsculas dos arquivos de cabeçalho com um script Perl simples: Ele irá corrigir retornos de carro e conjunto inclui em minúsculas. As correções parte comentou o inclui.

#!/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, ".");

Como os outros disse, o problema original não tem nada a ver com SCMs, realmente. Quanto a usar git, você poderia fazer a mesclagem no git-svn e empurrá-lo de volta para o SVN repo - basta estar à frente ciente do tempo que esta é uma opção de uma só vez, ou seja, não espere SVN para perceber que este cometer era uma fusão ou mesmo que os arquivos foram renomeados -. você vai perder histórico do arquivo a menos que você está realmente cuidado

Como uma nota lateral ao lado de opção "muito cuidado", a única maneira de fazer git-svn pressão correta "File Rename" info para svn que parece funcionar de forma confiável é renomear os arquivos em git-svn sem alterar nenhum conteúdo, cometeu, em seguida, modificar arquivos que você quer e fazer outra cometer. Se você modificar o arquivo renomeado antes de cometer, git-svn sabe que o arquivo tem provável foi movido mas aparentemente não confia em seu próprio suficiente heurística para empurrar esta informação de volta para svn. É bem possível que eu estou faltando alguma opção mágico que faz este trabalho melhor:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top