سؤال

في بعض الأحيان يتعين علي العمل على كود يحرك ساعة الكمبيوتر إلى الأمام.في هذه الحالة، يتم تعيين تاريخ التعديل الأخير لبعض ملفات ‎.cpp أو ‎.h على الوقت المستقبلي.

لاحقًا، عندما يتم إصلاح ساعتي، وأقوم بتجميع مصادري، يقوم النظام بإعادة بناء معظم المشروع لأن بعض تواريخ التعديل الأخيرة موجودة في المستقبل.كل إعادة ترجمة لاحقة لديه نفس المشكلة.

الحل الذي أعرفه هو:

أ) ابحث عن الملف الذي يحتوي على الوقت المستقبلي وأعد حفظه.هذه الطريقة ليست مثالية لأن المشروع كبير جدًا ويستغرق وقتًا حتى بالنسبة للبحث المتقدم في Windows للعثور على الملفات التي تم تغييرها.

ب) احذف المشروع بأكمله وأعد التحقق منه من svn.

هل يعرف أحد كيف يمكنني التغلب على هذه المشكلة؟

هل ربما يكون هناك إعداد في الاستوديو المرئي يسمح لي بإخبار المترجم باستخدام بت الأرشيف بدلاً من تاريخ التعديل الأخير لاكتشاف تغييرات الملف المصدر؟

أو ربما توجد أداة إعادة ضبط تاريخ التعديل العودي التي يمكن استخدامها في هذه الحالة؟

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

المحلول

إذا كانت هذه هي مشكلتي، فسأبحث عن طرق لتجنب التلاعب بوقت النظام.عزل الكود ضمن اختبارات الوحدة، أو جهاز افتراضي، أو شيء من هذا القبيل.

ومع ذلك، لأنني أحب بوويرشيل:

Get-ChildItem -r . | 
    ? { $_.LastWriteTime -gt ([DateTime]::Now) } | 
    Set-ItemProperty -Name "LastWriteTime" -Value ([DateTime]::Now)

نصائح أخرى

أوصي باستخدام جهاز افتراضي حيث يمكنك العبث بالساعة حسب رغبتك ولن يؤثر ذلك على جهاز التطوير الخاص بك.اثنان منها مجانيان الكمبيوتر الظاهري من مايكروسوفت و VirtualBox من الشمس.

لا أعرف ما إذا كان هذا يعمل في حالتك ولكن ماذا عن عدم تحريك ساعتك للأمام، ولكن قم بتغليف طريقة gettime الخاصة بك (أو أي شيء تستخدمه) وتجعلها تعود بالوقت المستقبلي الذي تحتاجه؟

ثَبَّتَ يونكس Utils

touch temp
find . -newer temp -exec touch {} ;
rm temp

تأكد من استخدام المسار الكامل عند الاتصال بـ find وإلا فإنه من المحتمل أن يستخدم Windows find.exe بدلاً من ذلك.لم يتم اختبار هذا في Windows Shell - قد تحتاج إلى تعديل بناء الجملة قليلاً.

أنا لا أستخدم windows - ولكن بالتأكيد هناك شيء مثل awk أو grep الذي يمكنك استخدامه للعثور على الملفات ذات الطابع الزمني "المستقبلي"، ثم "لمسها" حتى يكون لديها الوقت المناسب - حتى نص Perl.

1) استخدم نظام إنشاء لا يستخدم الطوابع الزمنية لاكتشاف التعديلات، مثل السكونز

2) الاستخدام ccache لتسريع نظام البناء الخاص بك الذي يستخدم الطوابع الزمنية (وإعادة بناء الكل).

في كلتا الحالتين، يتم استخدام md5sum للتحقق من تعديل الملف، وليس الطوابع الزمنية.

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