سؤال

أرغب في إضافة جميع الملفات غير المنفجرة ضمن دليل إلى SVN باستخدام Sharpsvn.

حاولت أوامر SVN العادية في سطر الأوامر أولا:

C:\temp\CheckoutDir> svn status -v

أرى جميع subdirs، جميع الملفات التي تم فحصها بالفعل، هناك عدد قليل من الملفات الجديدة المسمى "؟"، لا شيء مع إشارة قفل "L"

C:\temp\CheckoutDir> svn add . --force

ينتج عن هذا كل الملفات الجديدة في SubDIRS، والذي يتم بالفعل التحكم في الإصدار نفسه، لإضافته.

أود أن أفعل نفس الشيء باستخدام Sharpsvn. أقوم بنسخ عدد قليل من الملفات الإضافية في نفس الدليل وتشغيل هذا الرمز:

...
using ( SharpSvn.SvnClient svn = new SvnClient() )
{
    SvnAddArgs saa = new SvnAddArgs();
    saa.Force = true;
    saa.Depth = SvnDepth.Infinity;
    try
    {
        svn.Add(@"C:\temp\CheckoutDir\." , saa);
    }
    catch (SvnException exc)
    {
        Log(@"SVN Exception: " + exc.Message + " - " + exc.File);
    }
}

ولكن يتم رفع SvnException:

  • svnexception.message: نسخة العمل 'c: temp checkoutdir' مغلق
  • svnexception.file: .. .. .. subversion libsvn_wc lock.c "

لا يوجد مثيل SVNClient آخر يعمل في التعليمات البرمجية، لقد حاولت أيضا الاتصال

svn.cleanup()

مباشرة قبل إضافة، ولكن دون جدوى.

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

شكرا مقدما!

في يناير

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

المحلول

استخدم هذه الأداة http://svncompleetesync.codeplex.com/ أو خذها كعينة. يفعل بالضبط ما تحتاجه.

نصائح أخرى

جربت أداة Malcolm لكنني لم أتمكن من الوصول إليها الآن بعد أن تبحث عن عدد قليل من العمر، ولكن بعد النظر إلى التعليمات البرمجية المصدر تبدو وكأنها حقا كل ما تحتاجه لاستخدامه لمزامنة مجلد الخروج المحلي واحد في SVN:

string _localCheckoutPath = @"C:\temp\CheckoutDir\";
SvnClient client = new SvnClient();

Collection<SvnStatusEventArgs> changedFiles = new Collection<SvnStatusEventArgs>();
client.GetStatus(_localCheckoutPath, out changedFiles);

//delete files from subversion that are not in filesystem
//add files to suversion , that are new in filesystem

foreach (SvnStatusEventArgs changedFile in changedFiles)
{
    if (changedFile.LocalContentStatus == SvnStatus.Missing)
    {
        client.Delete(changedFile.Path);
    }
    if (changedFile.LocalContentStatus == SvnStatus.NotVersioned)
    {
        client.Add(changedFile.Path);
    }
}

SvnCommitArgs ca = new SvnCommitArgs();
ca.LogMessage = "Some message...";

client.Commit(_localCheckoutPath, ca);

أعتقد أنك يجب أن لا لاحقة المسار مع ""، ". يحاول:

svn.Add(@"C:\temp\CheckoutDir" , saa);

يرجى مناقشة ذلك بشكل أكبر على القائمة / القائمة البريدية لمناقشة Sharpsvn، لأن السلوك الذي تراه قد يكون خطأ.

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