سؤال

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

هل يمكنني بأي حال من الأحوال إجبار ملف واحد على الالتزام دائمًا بخادم SVN؟

أنا أستخدم TortoiseSVN لنظام التشغيل Windows لذا فإن أي تعليمات برمجية أو تعليمات خطوة بخطوة ستكون مفيدة.

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

المحلول

إذا كان TortoiseSVN مثبتًا لديك، فستتوفر لديك أيضًا أداة SubWCRev.استخدم هذه الأداة للحصول على المراجعة بدلاً من إساءة استخدام الكلمة الأساسية $REV$.

  1. قم بإنشاء ملف قالب يحتوي على تعريفاتك، ربما شيء من هذا القبيل

    ثابت طويل WC_REV = $WCREV$؛

    في ملف اسمه version.h.tmpl

  2. في كل إصدار، اتصل بـ SubWCRev لإنشاء الملف "الحقيقي" الذي يمكنك استخدامه في تطبيقك:

    مسار SubWCRev\إلى\مسار نسخة العمل\إلى\version.h.tmpl مسار\إلى\version.h

سيؤدي هذا إلى إنشاء الملف version.h من version.h.tmpl، مع استبدال النص $WCREV$ بالمراجعة التي توجد بها نسخة العمل الخاصة بك حاليًا.

ال مستندات SubWCRev قد يساعد أيضا.

نصائح أخرى

في الأساس، تريد إخراج svnversion الأمر في ملف.

عادةً ما يتم الاحتفاظ بهذه الملفات خارج المستودع، ويتم إنشاؤها تلقائيًا بواسطة برنامج نصي للإنشاء.أقترح عليك أن تفعل الشيء نفسه.إذا لم تقم بالبناء، ولكن فقط ل svn up على جانب الخادم، فقط اتصل svnversion بعد svn up أو قم بإنشاء برنامج نصي Shell للقيام بكلا الإجراءين.

اذا أنت يملك لإبقائه في المستودع من ناحية أخرى، يدعو svnversion في خطاف ما قبل الالتزام سيكون أفضل رهان لك.

أعتقد أنك ربما لا تفهم كيفية عمل علامة $Rev$.الهدف من علامة Rev ليس جعل هذه المراجعة ملتزمة دائمًا بمستودع التخريب.الهدف هو أنه عند التحديث، ستكون علامة المراجعة دائمًا هي نفس المراجعة. لا يجب أن تحتاج إلى وضع التعليمات البرمجية في التخريب الذي يحتوي على المراجعة. يعد Subversion جيدًا جدًا في تتبع تلك المعلومات لك.

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

svn propset svn:keywords "Revision" file.txt

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

@gatekiller:يبدو أن TortoiseSVN يدعم خطافات جانبية للعميل.

يعمل هذا بشكل جيد، باستثناء أنه إذا لم أقم بإجراء أي تغييرات على هذا الملف، فلن يتم الالتزام به.

إذا لم يتغير الملف أبدًا، فلماذا تحتاج إلى الالتزام به في كل مرة؟

edit] sean = أفهم ما يحاول القيام به ، ولكن إذا لم يتم تحديث الملف أبدًا عبر خطاف أو عملية أخرى ، وبالتالي لن يتغير أبدًا ، فلن يتم التقاطه أبدًا.

أقترح تغيير النهج، فتنفيذ ملف في كل مرة يعني ضمنيًا الاحتفاظ برقم المراجعة العالمي في هذا الملف.قد يحتاج المستخدم هناك إلى كلمة رئيسية أخرى، المفتاح العالمي, ، الذي تم شرح عدم وجوده هنا أنا في الواقع لم تستخدم المذكورة com.svnversion ومع ذلك، قد يقودك إلى الحل.

هل يمكن تغيير ملف رقم المراجعة بواسطة برنامج نصي ينشر موقع الويب الخاص بك من SVN إلى خادم الويب؟

لست متأكدًا من ذلك على نظام التشغيل Windows، ولكن باستخدام برنامج نصي bash، سأفعل شيئًا مثل..

$ version=$(svnversion)
$ svn export . /tmp/staging/
Export complete.
$ echo "Revision: ${version}" > /tmp/staging/version.txt

ثم /tmp/staging/version.txt سيحتوي على "مراجعة:1" (أو أيًا كان رقم المراجعة الأعلى).

يمكنك بالطبع استبدال بعض المعرفات في ملف، مثل $Rev$ (بدلاً من إنشاء version.txt حسب المثال أعلاه)

اعتمادًا على عميلك، يقدم البعض منهم خطافًا للالتزام المسبق يمكنك من خلاله تنفيذ شيء ما ببساطة "يلمس" الملف ويضع علامة عليه على أنه قد تم تغييره.إذا كنت تستخدم شيئًا مثل Visual Studio، فيمكنك إنشاء مهمة إنشاء منشور من شأنها "لمس" الملف ولكن يجب عليك التأكد من قيامك بالإنشاء قبل تنفيذ التغييرات.

@gradonmantank:لأنه يريد تحديث هذا الملف برقم المراجعة الأخير.هل قرأت سؤاله كاملاً؟

قد يعمل خطاف الالتزام المسبق.

اعتدت أن يكون لدي طريقة يدوية للقيام بذلك.سأقوم بتشغيل برنامج نصي يستخدم sed لاستبدال تعليق بالطابع الزمني الحالي في ملف $Rev$ الخاص بي.بهذه الطريقة، ستتغير محتويات الملف وسيقوم Subversion بتنفيذه.

ما لم أفعله هو الانتقال إلى الخطوة التالية:استخدام خطافات مستودع التخريب لأتمتة العملية.المشكلة هي أنني لست متأكدًا مما إذا كان مسموحًا لك بتغيير محتويات الملف في الخطافات.يبدو أن الوثائق تشير إلى أنه لا يمكنك ذلك.

بدلاً من ذلك، أعتقد أنك ستحتاج إلى نص صغير يمكنك تنفيذه بدلاً من svn commit الأمر الذي يقوم أولاً بتحديث الطابع الزمني ثم تشغيل الالتزام العادي.

إن إعداد الملف لن يفيدك.الملف غير ملتزم بالنسخة الكاملة بداخله، بل يتم استبداله بالكلمة الأساسية فقط.إذا نظرت إلى الملف داخل المستودع سترى هذا.

على هذا النحو، تحتاج إلى فرض تحديث الملف بطريقة ما بدلاً من ذلك.

إذا كنت تستخدم نظام التشغيل Windows، فيمكنك استخدام أداة SubWCRev، الموزعة مع TortoiseSVN.توثيق هنا.

يمكنك استخدام خطافات الالتزام المسبق svn للقيام بذلك.
الفكرة العامة التي أفكر فيها هي إنشاء فكرة تضع رقم المراجعة الجديد في الملف قبل الالتزام (احصل عليه باستخدام svnlook) أو ربما تغير خاصية زائفة في الملف (يجب تغييرها أو سيتجاهلها SVN).

لمزيد من المعلومات حول خطافات الالتزام المسبق التي وجدتها هذه الصفحة مفيد.

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

إذا كنت تستخدم maven، فيمكنك القيام بذلك باستخدام البرنامج المساعد maven-buildnumber.

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