تراجع TFS عندما قام المستخدم بحذف الملف وإنشاء واحد جديد بنفس الاسم
-
22-09-2019 - |
سؤال
قام شخص ما (بخلاف نفسي) بحذف الملفات بطريق الخطأ في 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) ، فقط تلك التي تسبب تصادم اسم الملف