سؤال

لدينا كود C++ و تدار في إس.تطوير مع Visual Studio.كما تعلمون Visual Studio C++ هي قضية حساسة أسماء الملفات و مدونة للأسف "استغلال" هذه بشكل كبير.

لا نحن ترقية التطبيق لدينا لينكس + مجلس التعاون الخليجي ، هو القضية الحساسة.هذا سوف تنطوي على الكثير من أسماء الملفات و ملف التغييرات.خططنا للقيام التنمية في فصل فرع.

يبدو أن إس تسمية لديه مشكلة معروفة (هنا و هنا).هل هناك طريقة الحل ؟ هو git-svn أو svnmerge يمكن أن تساعد هنا ؟

شكرا ديما

هل كانت مفيدة؟

المحلول

حالة حساسية المسألة ليست حول Visual Studio مقابلدول مجلس التعاون الخليجي, ولكن بدلا عن الملفات;معيار نظام الملفات في نظام التشغيل Windows و Mac OS X (FAT32 و NTFS for Windows, HFS+ for Mac OS X) ، هي حالة insenstive ولكن حالة الحفاظ على حين لينكس نظام الملفات (الملفات ext2 و ext3 و ext4) هي قضية حساسة.أقترح إعادة تسمية الملفات باستخدام كل حالة انخفاض جميع الملفات المصدر ، ثم فرع -- بالطبع -- للمستقبل ، سياسة صارمة باستخدام أقل القضية ".cpp" التمديد لجميع C++ مصدر الملفات ".h" لجميع الملفات رأس.هل هناك أي سبب لا يمكن إجراء هذه تسمية قبل فرع ؟

نصائح أخرى

بوابة نفسها الصفقات (جيد جدا) مع مشكلة إعادة تسمية الملفات في دمج (وليس فقط) عن طريق القيام ارشادي ملف محتويات الملف على أساس التشابه إعادة تسمية الكشف.أنها لا تتطلب الحصول على معلومات حول إعادة تسمية دخلت مثل إعادة تسمية تتبع الحل.

هناك نوعان من الأسئلة هنا ، هو واحد إس قيود على إعادة تسمية و يدمج في رأيي مرة واحدة وقد قرر أن يذهب مع 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, ".");

كما قال آخرون ، الأصلي المشكلة لا علاقة له SCMs حقا.أما بالنسبة باستخدام git, هل يمكن أن تفعل الدمج في git-svn ودفعها إلى إس الريبو - فقط تكون على علم قبل الوقت أنه هذا هو الخيار أي لا نتوقع SVN أن ندرك أن هذا الالتزام كان دمج أو حتى الملفات التي تم تغيير اسمها - سوف تفقد ملف التاريخ إلا إذا كنت حقا حذرا.

كملاحظة جانبية إلى جانب "حذرا جدا" الخيار ، فإن الطريقة الوحيدة لجعل git-svn دفع الصحيح "إعادة تسمية الملفات" معلومات إس يبدو للعمل بشكل صحيح هو إعادة تسمية الملفات في git-svn دون تغيير أي محتويات, ارتكاب, ثم تعديل أي ملفات تريد وتفعل شيئا آخر يرتكبها.إذا قمت بتعديل تسمية الملف قبل الالتزام, git-svn يعرف أن الملف قد على الأرجح تم نقله ولكن على ما يبدو لا تثق بنفسها عن مجريات الأمور بما فيه الكفاية لدفع هذه المعلومات مرة أخرى إلى svn.فمن الممكن جدا أن أنا في عداد المفقودين بعض سحرية الخيار أن يجعل هذا العمل أفضل :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top