質問

当社のコードはC ++であり、svnで管理されています。開発はVisual Studioを使用しています。ご存じのように、Visual Studio C ++はファイル名とコードの大文字と小文字を区別しませんが、残念ながら「エクスプロイト」コードはこれはかなり。

いいえ、アプリケーションをLinux + gccに移植します。これは 大文字と小文字を区別します。これには、多くのファイル名とファイルの変更が伴います。別のブランチで開発を行う予定でした。

svn renameにはよく知られている問題があるようです(こちらおよびこちら)。 回避策はありますか? git-svnまたはsvnmergeはここで役立ちますか?

ありがとう ディマ

役に立ちましたか?

解決

大文字と小文字の区別の問題は、Visual StudioとGCCの問題ではなく、ファイルシステムの問題です。 WindowsおよびMac OS Xの標準ファイルシステム(Windowsの場合はFAT32およびNTFS、Mac OS Xの場合はHFS +)は大文字と小文字を区別しませんが、大文字と小文字を保持します。Linuxファイルシステム(ext2、ext3、およびext4)は大文字と小文字を区別します。すべてのソースファイルにすべて小文字を使用してファイル名を変更し、ブランチを作成することをお勧めします。もちろん、将来的には、小文字と" .cpp"を使用するという厳格なポリシーを設定してください。すべてのC ++ソースファイルおよび" .h"の拡張子すべてのヘッダーファイル用。ブランチの前にこの名前変更を実行できない理由はありますか?

他のヒント

Git自体は、ヒューリスティックなファイルコンテンツとファイル名の類似性に基づいて rename detection を実行することにより、マージ内の名前変更されたファイルの問題に対処します。名前変更追跡ソリューションのように、名前の変更に関する情報を入力する必要はありません。

ここには2つの質問があります。1つは名前変更とマージに関する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 = 

ここには2つの質問があります。1つは名前変更とマージに関するsvnの制限です。私の意見では、プロジェクトでsvnを使用することに決めた場合、バージョン管理ソフトウェアを途中で切り替えることはお勧めできません。私は他の開発者と話をして、プロジェクト全体をロックし、名前を変更するサイクルを作ります。

私の場合、単純なperlスクリプトを使用して、ヘッダーファイルの大文字と小文字を区別する問題を解決しました。キャリッジリターンを修正し、インクルードを小文字に設定します。 コメント部分はインクルードを修正します。

<*>; 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リポジトリにプッシュバックできます-これは1回限りのオプションであることに注意してください。つまり、SVNがこのコミットを認識することを期待しないでください。マージされたか、ファイルの名前が変更された場合でも、本当に気をつけないと ファイル履歴は失われます。

「非常に慎重に」と一緒にサイドノートとしてオプション、git-svnが正しい「ファイル名の変更」をプッシュする唯一の方法確実に動作すると思われるsvnの情報は、git-svnのファイルの名前を any の内容を変更せずに変更し、コミットしてから、必要なファイルを変更して別のコミットを行うことです。コミットする前に名前を変更したファイルを変更すると、git-svnはファイルが移動された可能性が高いことを知っていますが、明らかにこの情報をsvnに戻すのに十分なヒューリスティックを信頼していません。これをより良くする魔法のオプションが欠けている可能性は十分にあります:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top