मैं अपने PHP अनुप्रयोग को संशोधित संख्या के साथ लेबल करना चाहता हूं, लेकिन मैं CruiseControl का उपयोग नहीं करना चाहता हूं या फ़ाइल को अपडेट नहीं करना चाहता हूं और इसे हर बार अपलोड करना चाहता हूं। मैं इसे कैसे करूं?मैं PHP में सबवर्जन संशोधन संख्या कैसे प्राप्त कर सकता हूं?
उत्तर
एसवीएन कीवर्ड एक अच्छा समाधान नहीं है। जैसा कि अन्य ने फ़ाइल में $ संशोधन $ जोड़ने को इंगित किया है, केवल विशिष्ट फ़ाइल को प्रभावित करता है, जो लंबे समय तक नहीं बदला जा सकता है।
प्रत्येक प्रतिबद्धता व्यर्थ होने से पहले फ़ाइल को "संपादित करें" (एक खाली रेखा जोड़कर या हटाकर) को याद रखना। आप हाथ से संशोधन टाइप कर सकते हैं।
ऐसा करने का एक अच्छा तरीका (जो मुझे पता है) एक स्वचालित तैनाती प्रक्रिया (जो हमेशा एक अच्छी बात है) और svnversion कमांड का उपयोग करना है। यहां मैं क्या करता हूं:
जहां भी मुझे संशोधन की आवश्यकता है, मैं इसमें शामिल हूं: <?php include 'version.php'; ?>
।यह "version.php" फ़ाइल में केवल संशोधन संख्या है। इसके अलावा यह भंडार का हिस्सा नहीं है (इसे अनदेखा करने के लिए सेट किया गया है)। यहां बताया गया है कि मैं इसे कैसे बनाता हूं:
1) उन परियोजनाओं पर जहां सर्वर पर एसवीएन स्थापित है, मैं इसे तैनाती के लिए भी उपयोग करता हूं।
cd /var/www/project
svn update
rm version.php
svnversion > version.php
2) परियोजनाओं जहां SVN मेरी तैनाती स्क्रिप्ट स्थापित नहीं है पर अधिक जटिल है: सर्वर से नवीनतम संस्करण हो रही है मैं अन्य बातों के अलावा निम्नलिखित (यह सर्वर पर चलाता है) करता है कि एक स्क्रिप्ट है यह स्थानीय रूप से version.php फ़ाइल बनाता है, कोड को ज़िप करता है, अपलोड करता है और इसे
तोड़फोड़ पेड़ की एक जाँच-आउट प्रति अपने webroot मानते हुए है, तो आप /.svn/entries फ़ाइल को पार्स सकता है और संशोधन संख्या (यहाँ 4 लाइन) बाहर हुक ...
PHP में:
$svn = File('.svn/entries');
$svnrev = $svn[3];
unset($svn);
आपके आवेदन SVN internals पर निर्भर करता है। क्षमा करें, नो-नो –
@ ब्रेंट। लोंगबोरो अगर मैं कर सकता हूं तो मैं आपकी टिप्पणी को कम कर दूंगा, लेकिन मैं नहीं कर सकता, इसलिए मैं इसके बजाय इस टिप्पणी को छोड़ दूंगा। –
दरअसल यह संभावित रूप से "वहां नहीं" svnversion बाइनरी, विंडोज़ सिस्टम, डेवलपर चेकआउट इत्यादि पर विशेष रूप से उपयोग करने से अधिक पोर्टेबल दिखता है –
:
आप इसे जोड़कर कर सकते हैं अपने कोड में कहीं भी निम्न
$Id:$
इसलिए उदाहरण के लिए जेफ किया:
<div id="svnrevision">svn revision: $Id:$</div>
और जब सर्वर में जाँच $ ईद की जगह: $ वर्तमान संशोधन संख्या के साथ। मुझे this reference भी मिला।
वहाँ भी $ तिथि है: $, $ रेव: $, $ संशोधन: $
इसके साथ सावधान रहें। जैसा कि उल्लेख किया गया है, एसवीएन कीवर्ड अद्यतन नहीं होगा जब तक कि वह फ़ाइल बदल नहीं जाती है। मेरे पास एक कोडबेस है जहां यह जानकारी "विंडो के बारे में" है जो बहुत ही कम हो जाती है। मैं अक्सर उस फ़ाइल को "संपादित" करना भूल जाता हूं ताकि रेव आईडी अपडेट हो। –
ज्यादातर मामलों में सर्वर पर कोड वास्तव में एक कोड है, न कि चेकआउट के "निर्यात करें" होते हैं , और इसलिए .svn फ़ोल्डर्स नहीं है। कम से कम वह सेटअप है जिसे मैं अक्सर देखता हूं। क्या दूसरों को वास्तव में वेब सर्वर पर अपना कोड जांचते हैं?
नहीं, आप शायद वहां पर हैं। यह शायद एक उत्पादन सर्वर के लिए भी सबसे अच्छा व्यवहार है ... आप शायद नहीं चाहते हैं कि लोग .svn dirs पर snooping। – Oli
मुझे आशा है कि आप निश्चित रूप से अपने सर्वर कॉन्फ़िगरेशन या कम से कम .htaccess में .svn dirs तक पहुंच को अस्वीकार कर दें। अन्यथा, आपका पूरा कोड देखा जा सकता है। –
सबवर्सन "कीवर्ड प्रतिस्थापन" का उपयोग करना सबसे आसान तरीका है। एसवीएन पुस्तक में here एक गाइड है (Version Control with Subversion)।
आपको मूल रूप से बस अपनी फ़ाइल में $ $ $ $ $ टेक्स्ट जोड़ना होगा। फिर अपने भंडार में कीवर्ड को सक्षम करें। चेकआउट पर एसवीएन फ़ाइल में संशोधन संख्या को प्रतिस्थापित करेगा।
आप SVN Keywords के साथ निकट हो सकते हैं। $ संशोधन जोड़ें $ जहां आप संशोधन दिखाना चाहते हैं, लेकिन यह केवल अंतिम संशोधन दिखाएगा कि विशेष फ़ाइल बदल दी गई थी, इसलिए आपको प्रत्येक बार फ़ाइल में बदलाव करना होगा। किसी भी प्रकार की बाहरी स्क्रिप्ट या पोस्ट-प्रतिबद्ध हुक के बिना वैश्विक संशोधन संख्या प्राप्त करना संभव नहीं है।
ऐसा करने की एक और संभावना है कि "तैनाती प्रक्रिया" में वर्णित चरणों को निष्पादित करने वाले क्रॉन को चलाने के लिए (माना जाता है कि यह एक * nix/freeBSD है सर्वर)।
तुम भी इसे इस तरह कर सकता है:
$status = @shell_exec('svnversion '.realpath(__FILE__));
if (preg_match('/\d+/', $status, $match)) {
echo 'Revision: '.$match[0];
}
समान प्रश्न "Mark" svn export with revision को मेरी प्रतिक्रिया देखें।
आप संशोधन संख्या कैप्चर करते हैं जब आप निर्यात आप का उपयोग कर सकते हैं:
svn export /path/to/repository | grep ^Exported | sed 's/^[^0-9]\+\([0-9]\+\).*/\1/' > revision.txt
यदि प्रदर्शन:
svn export /path/to/repository | grep ^Exported > revision.txt
सब कुछ लेकिन संशोधन संख्या, तो आप इस एसईडी आदेश के माध्यम से यह पाइप कर सकते हैं निकालने के लिए एक मुद्दा है, तो आप कर सकते हैं:
exec('svn info /path/to/repository', $output);
$svn_ver = (int) trim(substr($output[4], strpos($output[4], ':')));
यह निश्चित रूप से आपके एच पर निर्भर करता है एक चेकआउट किया, और svn कमांड की उपस्थिति।
देर से बिट, लेकिन एक सबवर्जन पोस्ट-प्रतिबद्ध हुक का उपयोग करें। अपने भंडार के हुक फ़ोल्डर में, इस तरह का खोल स्क्रिप्ट बनाने के लिए:
#!/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
यह विशेष रूप से उदाहरण मानता है आपकी लाइव साइट/वेब/जड़ में है और विकास कोड कहीं और आयोजित किया जाता है। जब आप एक dev परिवर्तन करते हैं, तो स्क्रिप्ट पूर्व लाइव टेम्पलेट को हटा देती है (संघर्ष संदेशों से बचने के लिए), अद्यतन को चलाता है और वास्तविक संशोधन संख्या के साथ टेम्पलेट में REVISION की घटनाओं को प्रतिस्थापित करता है।
अधिक हुक here
पर यह कैसे मैं यह काम करने के लिए मिल गया है। अपने सर्वर shell_exec अनुमति देने के लिए सेटअप है और आप SVN बस चलाने इंस्टॉल किया है:
$revision = `svnversion`;
या
$revision = shell_exec('svnversion');
कमांड svnversion नहीं है? – grantc
ओह! एक और देर रात होनी चाहिए। धन्यवाद! ठीक किया गया :) –
यह स्वीकार्य उत्तर कैसे नहीं है। ऐसा लगता है कि किसी भी अन्य योजना की तुलना में पूरी तरह से और बेहतर तरीके से काम करता है। आप टेक्स्ट फ़ाइल में सामान भी क्रॉन कर सकते हैं। धन्यवाद! आसान और सही और बिल्कुल ओपी ने क्या पूछा – ladieu
$svn_rev=file_get_contents('/path.to.repository/db/current');
- 1. एकाधिक परियोजनाओं में सबवर्जन संशोधन संख्या
- 2. वर्तमान सबवर्जन संशोधन आदेश
- 3. मैं अपने स्रोत कोड में नया एसवीएन संशोधन संख्या कैसे जमा कर सकता हूं? (TortoiseSVN)
- 4. मैं पायथन में यादृच्छिक संख्या कैसे उत्पन्न कर सकता हूं?
- 5. मैं प्रतिनिधि कैसे प्राप्त कर सकता हूं?
- 6. मैं सबवर्जन बाइनरी कहां डाउनलोड कर सकता हूं?
- 7. मैं पिछले संशोधन में पैच कैसे लगा सकता हूं?
- 8. रूबी भाषा में, मैं स्ट्रिंग में लाइनों की संख्या कैसे प्राप्त कर सकता हूं?
- 9. प्रोग्रामिंग रूप से एसवीएन संशोधन संख्या कैसे प्राप्त करें?
- 10. मैं क्रूसिबल में शुरू होने वाले ट्रंक संशोधन में शाखा को कैसे भिन्न कर सकता हूं?
- 11. मैं आईआईएस में PHP कैसे डीबग कर सकता हूं?
- 12. मैं पीएचपीएसटॉर्म में PHP संस्करण कैसे सेट कर सकता हूं?
- 13. पायथन, मैं gif फ्रेम कैसे प्राप्त कर सकता हूं
- 14. .NET: असेंबली वर्जन में बड़ी संशोधन संख्या
- 15. मैं निर्देशिका में फ़ाइलों की संख्या को कुशलता से कैसे प्राप्त कर सकता हूं?
- 16. सबवर्जन में विलय के लिए केवल-रिकॉर्ड है, मैं गिट में ऐसा कैसे कर सकता हूं?
- 17. मैं कुकी कैसे सेट कर सकता हूं और फिर PHP में रीडायरेक्ट कर सकता हूं?
- 18. मैं यह कैसे सुनिश्चित कर सकता हूं कि मैं php
- 19. मैं एक नंबर कैसे अलग कर सकता हूं और PHP में पहले दो अंक प्राप्त कर सकता हूं?
- 20. मैं कैसे निर्धारित कर सकता हूं अंक भी संख्या है?
- 21. मैं .NET में स्थानीय आईपी कैसे प्राप्त कर सकता हूं?
- 22. मैं डब्ल्यूपीएफ में डीपीआई कैसे प्राप्त कर सकता हूं?
- 23. मैं जावास्क्रिप्ट में टाइमज़ोन नाम कैसे प्राप्त कर सकता हूं?
- 24. मैं NSDictionary में पहला तत्व कैसे प्राप्त कर सकता हूं?
- 25. मैं AppEngine में बेस यूआरआई कैसे प्राप्त कर सकता हूं?
- 26. मैं जावा में सीपीयूड कैसे प्राप्त कर सकता हूं?
- 27. मैं .NET में cpu जानकारी कैसे प्राप्त कर सकता हूं?
- 28. मैं पर्ल में ट्रेसबैक कैसे प्राप्त कर सकता हूं?
- 29. मैं django मॉडल में विधि कैसे प्राप्त कर सकता हूं?
- 30. मैं symfony2 में एक JSON कैसे प्राप्त कर सकता हूं
आपके उत्तर की अच्छी बात यह है कि भाषा अज्ञेयवादी है: 'svnversion' टेक्स्ट फ़ाइल पर संशोधन संख्या सहेजता है और यह वह एप्लिकेशन है जिसकी उस फ़ाइल को बाद में उस फ़ाइल तक पहुंचने की आवश्यकता होती है। – AxeEffect