Frage

Unser Code ist C ++ und ist in svn verwaltet. Die Entwicklung ist mit Visual Studio. Wie Sie Visual Studio C ++ kennen, ist Groß- und Kleinschreibung Namen und unser Code leider „ausgenutzt“ diese stark Datei.

Nein, wir unsere Anwendung auf Linux + gcc portieren, die ist Groß- und Kleinschreibung. Dies wird eine Menge von Dateinamen und Dateiänderungen beinhaltet. Wir planten die Entwicklung in separaten Zweig zu tun.

Es scheint, dass svn Umbenennungs verfügt über ein gut bekanntes Problem ( hier und hier ). Gibt es eine Möglichkeit, es zu umgehen? Ist git-svn oder svnmerge kann hier helfen?

Danke Dima

War es hilfreich?

Lösung

Die Groß- und Kleinschreibung Problem ist nicht über Visual Studio vs. GCC, sondern über das Dateisystem; die Standard-Dateisysteme unter Windows und Mac OS X (FAT32 und NTFS für Windows, HFS + für Mac OS X), sind Fall insenstive aber Fall zu bewahren, während Linux-Dateisysteme (ext2, ext3 und ext4) Groß- und Kleinschreibung. Ich würde vorschlagen, dass Sie Ihre Dateien umbenennen, indem alle Kleinbuchstaben für alle Quelldateien, und dann verzweigen, und - natürlich - für die Zukunft, haben eine strenge Politik der Kleinschreibung verwendet und eine „CPP“ Erweiterung für alle C ++ Quelldateien und „.h“ für alle Header-Dateien. Gibt es einen Grund, warum Sie diese Umbenennung nicht ausführen können, vor der Verzweigung?

Andere Tipps

Git selbst beschäftigt (sehr gut) mit dem Problem der umbenannten Dateien in Merges (und nicht nur dort) durch heuristischen Datei-Inhalt und Dateinamen Ähnlichkeit zu tun basierte umbenennen Erkennung . Es erfordert keine Informationen zu Umbenennungen wie Umbenennungs Tracking-Lösung eingetragen.

Es gibt zwei Fragen hier, ist die SVN-Beschränkung auf Umbenennungen und verschmilzt, meiner Meinung nach, wenn man mit SVN zu gehen für ein Projekt entschieden hat, ist es nicht ratsam wäre, Versionskontrollsoftware in der Mitte zu wechseln. Ich würde mit den anderen Entwicklern sprechen und machen Zyklen des gesamten Projekts Sperren und die Umbenennungs tun.

In meinem Fall löste ich die Groß- und Probleme der Header-Dateien mit einem einfachen Perl-Skript: Es wird Wagenrücklauf fix und Set enthält in Kleinbuchstaben. Der kommentierte Teil fixiert die enthält.

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

Wie bereits gesagt, hat das ursprüngliche Problem nichts mit SCMs zu tun, wirklich. Wie für die Verwendung von git, könnten Sie die Serie in git-svn tun und schieben Sie es auf den SVN Repo zurück - nur bewusst sein, vor der Zeit, dass dies eine Option einmalig ist, das heißt, nicht erwarten, SVN zu erkennen, dass diese verpflichten eine Zusammenführung war oder sogar, dass Dateien umbenannt wurden -. Sie Datei Geschichte verlieren, es sei denn du bist wirklich vorsichtig

Als Randnotiz neben „sehr vorsichtig“ Option, die einzige Möglichkeit, um git-svn richtig pushen „Datei umbenennen“ Info zu SVN, die zuverlässig zu funktionieren scheint ist, die Dateien in git-svn ohne Änderung umbenennen alle Inhalte, verpflichten, und dann ändern, was Dateien, die Sie wollen, und das andere tun zu begehen. Wenn Sie die umbenannte Datei ändern, bevor begehen, git-svn weiß, dass die Datei hat wahrscheinlich verschoben worden, aber anscheinend nicht seinem eigenen heuristischen vertrauen genug, um diese Informationen zurück zu SVN drücken. Es ist durchaus möglich, dass ich eine magische Option fehlt bin, der diese Arbeit macht besser:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top