Вопрос

Наш код написан на C++ и управляется в svn.Разработка ведется с помощью Visual Studio.Как вы знаете, Visual Studio C++ нечувствителен к регистру имен файлов, и наш код, к сожалению, активно этим пользуется.

Нет, мы портируем наше приложение на Linux + gcc, что является с учетом регистра.Это потребует множества имен файлов и изменений файлов.Мы планировали делать разработку в отдельной ветке.

Похоже, что у svn rename есть хорошо известная проблема (здесь и здесь).Есть ли способ обойти это?Может ли здесь помочь git-svn или svnmerge?

Спасибо, Дима

Это было полезно?

Решение

Проблема чувствительности к регистру не связана с Visual Studio или Visual Studio.GCC, а скорее о файловой системе;стандартные файловые системы в Windows и Mac OS X (FAT32 и NTFS для Windows, HFS+ для Mac OS X) не учитывают регистр, но сохраняют регистр, тогда как файловые системы Linux (ext2, ext3 и ext4) чувствительны к регистру.Я бы посоветовал вам переименовать ваши файлы, используя все строчные буквы для всех ваших исходных файлов, а затем разветвить их и, конечно же, на будущее иметь строгую политику использования нижнего регистра и расширения «.cpp» для все исходные файлы C++ и «.h» для всех файлов заголовков.Есть ли какая-либо причина, по которой вы не можете выполнить это переименование до ветки?

Другие советы

Git сам решает (очень хорошо) проблему переименования файлов при слиянии (и не только там), выполняя эвристическую обработку содержимого файлов и сходство имен файлов. обнаружение переименования.Не требуется вводить информацию о переименованиях, как в решении для отслеживания переименований.

Здесь есть два вопроса: один - это ограничение 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 поймет, что этот коммит было слияние или даже файлы были переименованы - вы потеряете историю файлов, если не Действительно осторожный.

В качестве примечания рядом с опцией «действительно осторожно», единственный способ заставить git-svn отправлять правильную информацию о переименовании файла в svn, которая, кажется, работает надежно, - это переименовать файлы в git-svn без изменений. любой содержимое, зафиксируйте, а затем измените любые файлы, которые хотите, и выполните еще одну фиксацию.Если вы измените переименованный файл перед фиксацией, git-svn узнает, что файл имеет вероятный был перемещен, но, видимо, не доверяет своей собственной эвристике настолько, чтобы отправить эту информацию обратно в svn.Вполне возможно, что я упускаю какую-то волшебную опцию, которая сделает эту работу лучше :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top