كيف يمكنني الحصول على رقم مراجعة Subversion في PHP؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

أرغب في تسمية تطبيق PHP الخاص بي برقم المراجعة الذي يستخدمه، لكنني لا أريد استخدامه مثبت السرعة أو قم بتحديث ملف وتحميله في كل مرة.كيف أفعل ذلك؟

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

المحلول

الكلمات الرئيسية SVN ليست حلاً جيدًا.كما أشار آخرون إلى أن إضافة $Revision$ في ملف يؤثر فقط الملف المحدد, والتي قد لا تتغير لفترة طويلة.

تذكر "تحرير" ملف (عن طريق إضافة أو إزالة سطر فارغ) قبل كل التزام لا معنى له.يمكنك أيضًا كتابة المراجعة يدويًا.

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

أينما أحتاج إلى المراجعة، أقوم بما يلي: <?php include 'version.php'; ?>.يحتوي الملف "version.php" هذا على رقم المراجعة فقط.علاوة على ذلك، فهو ليس جزءًا من المستودع (تم تعيينه ليتم تجاهله).هنا كيف أقوم بإنشائه:

1) في المشاريع التي يتم فيها تثبيت SVN على الخادم، أستخدمه أيضًا للنشر.الحصول على أحدث إصدار إلى الخادم لدي برنامج نصي يقوم، من بين أشياء أخرى، بما يلي (يتم تشغيله على الخادم):

cd /var/www/project
svn update
rm version.php
svnversion > version.php

2) في المشاريع التي لم يتم تثبيت SVN فيها، يكون نص النشر الخاص بي أكثر تعقيدًا:يقوم بإنشاء ملف version.php محليًا، ويضغط الكود، ويحمله ويستخرجه

نصائح أخرى

بافتراض أن webroot الخاص بك هو نسخة مسحوبة من شجرة التخريب، يمكنك تحليل الملف /.svn/entries وربط رقم المراجعة (السطر الرابع هنا)...

في PHP:

$svn = File('.svn/entries');
$svnrev = $svn[3];
unset($svn);

هذه هي الطريقة التي جعلتها تعمل.إذا تم إعداد الخادم الخاص بك للسماح shell_exec وقمت بتثبيت SVN فقط قم بتشغيل:

$revision = `svnversion`;

أو

$revision = shell_exec('svnversion');

من هذه الإجابة:

يمكنك القيام بذلك عن طريق إضافة ما يلي في أي مكان في الكود الخاص بك

$Id:$ 

لذلك على سبيل المثال فعل جيف:

<div id="svnrevision">svn revision: $Id:$</div>

وعندما يتم تسجيلها في الخادم ، استبدل $ id: $ برقم المراجعة الحالي.لقد وجدت أيضا هذا المرجع.

هناك أيضًا تاريخ $: $ ، $ Rev: $ ، $ Revision: $

لقد تأخرت بعض الشيء الآن، ولكن استخدم خطاف ما بعد الالتزام للتخريب.في مجلد الخطافات الخاص بمستودعك، قم بإنشاء برنامج نصي لـ Shell مثل هذا:

#!/bin/bash

REPOS="$1"
REV="$2"

cd /web/root
rm -f /web/root/templates/base.html
/usr/bin/svn update
/bin/sed -i s/REVISION/$REV/ /web/root/templates/base.html

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

المزيد عن الخطافات هنا

في معظم الحالات، قد تحتوي التعليمات البرمجية الموجودة على الخادم فعليًا على "تصدير" للتعليمات البرمجية، وليس عملية دفع، وبالتالي لا تحتوي على مجلدات .svn.على الأقل هذا هو الإعداد الذي أراه في أغلب الأحيان.هل يقوم الآخرون بالفعل بفحص الكود الخاص بهم على خادم الويب؟

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

يمكنك أيضًا القيام بذلك على النحو التالي:

$status = @shell_exec('svnversion '.realpath(__FILE__));
if ( preg_match('/\d+/', $status, $match) ) {
    echo 'Revision: '.$match[0];
}

أسهل طريقة هي استخدام "استبدال الكلمات الرئيسية" Subversion.هناك دليل هنا في كتاب SVN (التحكم في الإصدار مع التخريب).

سيكون عليك فقط إضافة النص $Rev$ في مكان ما في ملفك.ثم قم بتمكين الكلمة الأساسية في المستودع الخاص بك.عند الخروج، سيقوم SVN باستبدال رقم المراجعة في الملف.

انظر ردي على سؤال مماثل "وضع علامة" على تصدير svn مع المراجعة.

إذا قمت بالتقاط رقم المراجعة عند التصدير، فيمكنك استخدام:

svn export /path/to/repository | grep ^Exported > revision.txt

لإزالة كل شيء باستثناء رقم المراجعة، يمكنك تمريره عبر أمر sed هذا:

svn export /path/to/repository | grep ^Exported | sed 's/^[^0-9]\+\([0-9]\+\).*/\1/' > revision.txt
$svn_rev=file_get_contents('/path.to.repository/db/current');

هناك احتمال آخر للقيام بذلك وهو تشغيل cron الذي ينفذ الخطوات الموضحة في "عملية النشر" (بافتراض أنه خادم *nix/FreeBSD).

إذا كان الأداء يمثل مشكلة، فيمكنك القيام بما يلي:

exec('svn info /path/to/repository', $output);
$svn_ver = (int) trim(substr($output[4], strpos($output[4], ':')));

يعتمد هذا بالطبع على قيامك بالخروج ووجود الأمر svn.

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