Pregunta

Nuestro código es C ++ y se administra en svn. El desarrollo es con Visual Studio. Como sabe, Visual Studio C ++ no distingue entre mayúsculas y minúsculas para los nombres de archivos y nuestro código, desafortunadamente, "explotado". esto en gran medida.

No, estamos trasladando nuestra aplicación a Linux + gcc, que es sensible a mayúsculas y minúsculas. Esto implicará muchos nombres de archivo y cambios de archivo. Planeamos hacer el desarrollo en una rama separada.

Parece que svn rename tiene un problema bien conocido ( aquí y aquí ). ¿Hay alguna forma de solucionarlo? ¿Git-svn o svnmerge pueden ayudar aquí?

Gracias Dima

¿Fue útil?

Solución

El problema de mayúsculas y minúsculas no se trata de Visual Studio vs. GCC, sino más bien del sistema de archivos; Los sistemas de archivos estándar en Windows y Mac OS X (FAT32 y NTFS para Windows, HFS + para Mac OS X) no distinguen entre mayúsculas y minúsculas, pero los sistemas de archivos Linux (ext2, ext3 y ext4) distinguen entre mayúsculas y minúsculas. Le sugiero que cambie el nombre de sus archivos, utilizando minúsculas para todos sus archivos de origen, y luego bifurque y, por supuesto, para el futuro, tenga una política estricta de utilizar minúsculas y un " .cpp " extensión para todos los archivos fuente de C ++ y " .h " para todos los archivos de encabezado. ¿Hay alguna razón por la que no puede realizar este cambio de nombre antes de la rama?

Otros consejos

Git se ocupa (muy bien) del problema de cambiar el nombre de los archivos en las fusiones (y no solo allí) al hacer heurísticos de contenido de archivos y detección de cambio de nombre basada en similitud de nombre de archivo . No requiere tener información sobre los cambios de nombre ingresados, como la solución de seguimiento de cambio de nombre.

Aquí hay dos preguntas, una es la limitación de svn en los cambios de nombre y las fusiones, en mi opinión, una vez que se haya decidido utilizar svn para un proyecto, no sería aconsejable cambiar el software de control de versiones en el medio. Hablaría con los otros desarrolladores y realizaría ciclos para bloquear todo el proyecto y cambiar los nombres.

En mi caso, resolví los problemas de mayúsculas y minúsculas de los archivos de encabezado con un simple script en perl: solucionará los retornos de carro y establecerá las inclusiones en minúsculas. La parte comentada corrige las inclusiones.

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

sub wanted
{
    if(  m/\.c$/i || m/\.h$/i ) {
        my $orig = 

Aquí hay dos preguntas, una es la limitación de svn en los cambios de nombre y las fusiones, en mi opinión, una vez que se haya decidido utilizar svn para un proyecto, no sería aconsejable cambiar el software de control de versiones en el medio. Hablaría con los otros desarrolladores y realizaría ciclos para bloquear todo el proyecto y cambiar los nombres.

En mi caso, resolví los problemas de mayúsculas y minúsculas de los archivos de encabezado con un simple script en perl: solucionará los retornos de carro y establecerá las inclusiones en minúsculas. La parte comentada corrige las inclusiones.

<*>; 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 otros dijeron, el problema original no tiene nada que ver con SCM, realmente. En cuanto al uso de git, puede fusionar en git-svn y devolverlo al repositorio SVN, solo tenga en cuenta de antemano que esta es una opción única, es decir, no espere que SVN se dé cuenta de que este compromiso fue una fusión o incluso que los archivos fueron renombrados: perderá el historial de archivos a menos que sea realmente cuidadoso.

Como nota al margen junto a "realmente cuidadoso" opción, la única forma de hacer que git-svn push corrija " renombrar archivo " la información para svn que parece funcionar de manera confiable es cambiar el nombre de los archivos en git-svn sin cambiar el contenido de any , confirmar y luego modificar los archivos que desee y realizar otra confirmación. Si modifica el archivo renombrado antes de comprometerse, git-svn sabe que el archivo probablemente se ha movido, pero aparentemente no confía en su propia heurística lo suficiente como para devolver esta información a svn. Es muy posible que me falte alguna opción mágica que haga que esto funcione mejor :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top