2009-12-01 15 views
6

मेरे पास रेल साइट है। मैं चाहता हूं कि, mongrel पुनरारंभ करें, वर्तमान svn संस्करण को सार्वजनिक/version.txt में लिखने के लिए, ताकि मैं इसे पृष्ठ शीर्षलेख में एक टिप्पणी में डाल सकूं।टेक्स्ट sv0 में मौजूदा svn संस्करण लिखें

समस्या svn का वर्तमान स्थानीय संस्करण प्राप्त कर रहा है - मैं थोड़ा उलझन में हूं।

यदि, उदाहरण के लिए, मैं एक फ़ाइल पर svn अद्यतन करता हूं जिसे थोड़ी देर में अपडेट नहीं किया गया है, मुझे "संशोधन 4571 पर" मिलता है। हालांकि, अगर मैं svn जानकारी करता हूं, तो मुझे

पथ मिलता है:।
यूआरएल: http://my.url/trunk
भंडार रूट: http://my.url/lesson_planner
भंडार UUID: #########
संशोधन: 4570
नोड प्रकार: निर्देशिका
अनुसूची: सामान्य
अंतिम बदला गया लेखक: अधिकतम
अंतिम परिवर्तन की रेव: 4570
अंतिम बदला गया दिनांक: 2009-11-30 17:14:52 +0000 (सोम, 30 नवंबर 2009)

नोट इस संशोधन 4570, 1 पिछला आदेश की तुलना में कम है।

क्या कोई मुझे सीधे सेट कर सकता है और मुझे दिखा सकता है कि वर्तमान संस्करण संख्या को कैसे प्राप्त करें?

धन्यवाद, अधिकतम

+0

मेरे पास हमेशा एक सपना है जिसमें मेरा एप्लिकेशन का निर्माण नंबर एसवीएन संशोधन के साथ संरेखित होगा। मैं उत्सुक हूं कि यह कैसे काम करता है। –

+0

देखें: http://stackoverflow.com/questions/1449935/getting-svn-revision-number-into-a-program- स्वचालित रूप से –

उत्तर

6

सबवर्सन वास्तव में ऐसा करने के लिए कमांड के साथ आता है: SVNVERSION.EXE

उपयोग: svnversion [विकल्प] [WC_PATH [TRAIL_URL]]

काम कर प्रतिलिपि पथ WC_PATH के लिए एक कॉम्पैक्ट 'संस्करण संख्या' का निर्माण करें। TRAIL_URL पर उपयोग किए गए यूआरएल का पिछला हिस्सा है, यह निर्धारित करता है कि WC_PATH स्वयं स्विच हो गया है (WC_PATH के भीतर स्विच स्विच का पता लगाने TRAIL_URL पर निर्भर नहीं है)। संस्करण संख्या मानक आउटपुट पर लिखा गया है। उदाहरण के लिए:

$ svnversion . /repos/svn/trunk 
4168 

संस्करण संख्या एक संख्या हो सकता है अगर काम कर प्रतिलिपि एकल संशोधन है, असंशोधित, नहीं बंद और एक यूआरएल है कि TRAIL_URL तर्क से मेल खाता है।

4123: 4168 मिश्रित संशोधन काम कर प्रति
4168M काम कर संशोधित प्रतिलिपि
4123S काम कर प्रतिलिपि बंद
4123: 4168MS मिश्रित संशोधन, परिवर्तन, काम कर बंद तो काम कर प्रति असामान्य है संस्करण संख्या और अधिक जटिल हो जाएगा प्रति

यदि ऐसी निर्देशिका पर लागू किया गया है जो एक कार्यशील प्रति नहीं है, तो निर्यात की गई निर्देशिका कहती है, कार्यक्रम 'निर्यात' आउटपुट करेगा।

यदि तर्क के बिना बुलाया जाता है तो WC_PATH वर्तमान निर्देशिका होगी।

मान्य विकल्प: -n [--no-न्यू लाइन]: नहीं उत्पादन अनुगामी न्यू लाइन -c [--committed]: पिछले नहीं बल्कि वर्तमान संशोधन से बदल -h [--help]: इस प्रदर्शित मदद - संस्करण: संस्करण संस्करण दिखाएं

+0

मैं अपनी जानकारी फ़ाइलों की शुरुआत में यह जानकारी लिखना चाहता था, और यह पूरी तरह से काम करता है। धन्यवाद। – ryanjdillon

2

तुम सिर्फ भंडार के नवीनतम संशोधन प्रिंट करना चाहते हैं, तो आप कुछ इस तरह का उपयोग कर सकते हैं:

svn info <repository_url> -rHEAD | grep '^Revision: ' | awk '{print $2}' 

आप तैनाती के लिए Capistrano उपयोग कर सकते हैं, यह संशोधन फ़ाइल बनाता है, जो आप सार्वजनिक/version.txt

+0

यदि आप -r या पीईजी संशोधन (@। के माध्यम से संशोधन के बिना svn को URL भेजते हैं। ..) आप हमेशा हेड के लिए पूछते हैं, ताकि आप अपने उदाहरण में -एचएचईएडी छोड़ सकें। –

1

पर प्रतिलिपि बना सकते हैं ऐसा लगता है कि आप निर्देशिका पर svn info चला रहे हैं, लेकिन svn update किसी विशिष्ट फ़ाइल पर। आप संशोधन 4571 करने के लिए निर्देशिका अपडेट करते हैं, svn info प्रिंट चाहिए:

पथ:।

यूआरएल: http://my.url/trunk

भंडार रूट: http://my.url/lesson%5Fplanner

भंडार UUID: #########

संशोधन: 4571

[...]

अंतिम परिवर्तित रेव: 4571

ध्यान दें कि "अंतिम रूप से संशोधित संशोधन" आवश्यक रूप से भंडार के नवीनतम संशोधन के साथ संरेखित नहीं है।

+0

आह - ठीक है, समझ में आता है, धन्यवाद। –

4

मैं हेडर फ़ाइल svnversion.h बनाने के लिए निम्न शेल स्क्रिप्ट स्निपेट का उपयोग करता हूं जो संकलित कोड में उपयोग किए जाने वाले कुछ निरंतर वर्ण तारों को परिभाषित करता है।तुम बहुत कुछ इसी तरह करने के लिए सक्षम होना चाहिए:

#!/bin/sh -e 

svnversion() { 
    svnrevision=`LC_ALL=C svn info | awk '/^Revision:/ {print $2}'` 
    svndate=`LC_ALL=C svn info | awk '/^Last Changed Date:/ {print $4,$5}'` 

    now=`date` 

    cat <<EOF > svnversion.h 

// Do not edit! This file was autogenerated 
//  by $0 
//  on $now 
// 
// svnrevision and svndate are as reported by svn at that point in time, 
// compiledate and compiletime are being filled gcc at compilation 

#include <stdlib.h> 

static const char* svnrevision = "$svnrevision"; 
static const char* svndate = "$svndate"; 
static const char* compiletime = __TIME__; 
static const char* compiledate = __DATE__; 

EOF 
} 

test -f svnversion.h || svnversion 

यह मानता है कि आप एक नए सिरे से एक के निर्माण को गति प्रदान करने के लिए बनाया हेडर फाइल को दूर करेंगे।

0

कैपिस्ट्रानो और svninfo सुझाए गए सभी लोगों के लिए धन्यवाद।

हम वास्तव में कैपिस्ट्रानो का उपयोग करते हैं, और यह वास्तव में यह रिविजन फ़ाइल बनाता है, जो मुझे लगता है कि मैंने पहले देखा था लेकिन ध्यान नहीं दिया था। जैसा कि ऐसा होता है, हालांकि, यह मुझे बिल्कुल जरूरी नहीं है क्योंकि इसे केवल तैनाती पर अपडेट किया जाता है, जबकि कभी-कभी हम दो फाइलों को चुपचाप अपडेट कर सकते हैं, फिर पूर्ण तैनाती करने के बजाए पुनरारंभ करें।

मैं svninfo, grep और awk का उपयोग करके अपनी खुद की फाइल कर रहा हूं क्योंकि बहुत से लोगों ने यहां सुझाव दिया है, और इसे सार्वजनिक रूप से रखा है। यह मोन्गल स्टार्ट पर बनाया गया है, जो तैनाती प्रक्रिया का हिस्सा है और पुनरारंभ प्रक्रिया दोनों बार किया जाता है।

धन्यवाद सभी!

संबंधित मुद्दे