تراجع TFS عندما قام المستخدم بحذف الملف وإنشاء واحد جديد بنفس الاسم

StackOverflow https://stackoverflow.com/questions/1595237

سؤال

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

لا يمكنني تراجع المشروع بأكمله نظرًا لوجود عمل آخر ، أريد فقط إعادة هذه الملفات إلى كيفية "من قبل".

هل واجه أي شخص هذه المشكلة وحلها؟ أم لا يوجد حل.

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

المحلول

شكرا لكم جميعا على آرائكم. للرجوع إليها في المستقبل ، هذه هي الطريقة التي حللت بها الحالة أخيرًا:

أولاً ، أخذت نسخة محلية من الملف.

في Explorer Control ، قمت بتراجع المجلد الذي يحتوي على الملف إلى التغييرات التي تم فيها حذف الملف القديم ولكن لم يكن الملف الجديد موجودًا بعد. لقد قمت بإلغاء تخصيص الملف وتسجيل الوصول ، وبالتالي جلب الظهر الأصلي "من Beyond".

بعد ذلك ، كانت هذه حالة وضع نسختي المحلية والملف المسترد في أداة Diff (لقد استخدمت BeyondCompare BTW) وتصحيح الملف الذي تم استرداده لمطابقة الإصدار الجديد.

يمكنني القيام بذلك بسبب بضعة أسباب ، وهما:

  • تم الحذف وإعادة تضافير الملف في اثنين من التغييرات المتتالية.
  • كان الفرق بين الملف المسترد والنسخة المحلية "قاصرًا جدًا" (أي ، طريقة إضافية واثنين من المتسللين في تغيير آخر).

ليس لدي أي فكرة عما كان يمكن أن يحدث لو لم يفوتنا على سبيل المثال الملف المعني إلا بعد أسبوعين ، حيث كنا قد أجرينا العديد من التغييرات على الكود المحيط. ليس لدي أدنى فكرة عن أي تغييرات كبيرة تم إجراؤها على النسخة المحلية التي تعنيها من حيث الاسترداد.

نصائح أخرى

  • راجع الحل الخاص بك إلى نسخة عمل أخرى.
  • اسحب الملفات المحذوفة من نسخة العمل هذه والعودة إلى نسخة العمل الحالية الخاصة بك
  • فحص تلك الملفات في المشروع الحالي.

المشكلة الوحيدة التي يمكنني رؤيتها هنا ، هل قد تفقد التاريخ على الملف المحذوف.

يبدو وكأنه وظيفة ل أدوات الطاقة. ها أنت ذا:

$deletedFiles = 
    Get-TfsChangeset 12345| 
    % { $_.changes } | 
    ? { $_.changetype.tostring().contains("Delete") } |
    % { $_.item.serveritem }

$deletedFiles | 
    Add-TfsPendingChange -Delete | 
    New-TfsChangeset -Comment "Delete mistakenly re-added files"

$deletedFiles |    
    Get-TfsChildItem -Deleted |
    ? { $_.changesetid -eq 12345 } |
    # this bit of ugliness is required by a bug in the Power Tools
    % { "$($_.serveritem);X$($_.deletionid)" } | 
    Add-TfsPendingChange -Undelete |
    New-TfsChangeset -Comment "Undelete old files"

كما أشار إلى التعليق ، لا ينبغي أن يكون تحليل السلسلة القبيحة في خط الأنابيب النهائي ضروريًا في عالم PowerShell المثالي. إذا نجحت الأمور على النحو المقصود ، فيمكنك إزالة هذا الخط (أو ما يعادلها ، استبدله بـ SELECT-TFSITEM | ). لسوء الحظ ، لا يبدو أن أدوات الطاقة تتعامل مع معرفات الحذف ، كما كنت أقصدها.

على أي حال ، يجب أن يفعل هذا البرنامج النصي ما طلبته. ملاحظات:

  • استبدل 12368 مع التغييرات حيث قام المستخدم بحذف الملفات بطريق الخطأ
  • إذا رغبت في ذلك ، استبدل حذف + checkin في خط الأنابيب الثاني مع تدمير
  • هذا لا يعيد أي تغييرات أخرى في النظام (بما في ذلك التغييرات الأخرى في #12345) ، فقط تلك التي تسبب تصادم اسم الملف
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top