2008-10-03 12 views
9

में svn परिवर्तनों का पता लगाएं मेरे पास .bat है और .bat के अंदर मैं svn रिपॉजिटरी (उदाहरण के लिए, संकलित) के अंदर कुछ संशोधन करने पर एक विशेष कोड निष्पादित करना चाहता हूं।एक .bat

उत्तर

6

विन 2000 और उसके बाद इस svnOut चर करने के लिए SVN स्थिति commmand से पिछले उत्पादन पंक्ति आवंटित है और फिर परीक्षण चर कुछ भी होता है, तो:

@echo off 
set svnOut= 
set svnDir=C:Your\path\to\svn\dir\to\check 
for /F "tokens=*" %%I in ('svn status %svnDir%') do set svnOut=%%I 

if "%svnOut%"=="" (
    echo No changes 
) else (
    echo Changed files! 
) 

क्यों इस

तरह की एक पंक्ति है
set svnOut= 

आपको स्वयं को समझना होगा। ;-)

+0

बहुत बहुत धन्यवाद। यह सही है, मैं उस ASAP का परीक्षण करूंगा। – acemtp

+0

वास्तव में, यह काम नहीं करता है। उदाहरण के लिए, एसवीएन स्थिति कुछ लाइन देता है: ? फाइल एम फाइल 2 जो स्थानीय संशोधन या फ़ाइलें हैं जो भंडार में नहीं हैं। कुछ रिपोजिटरी में परिवर्तन होने पर मैं केवल "बदली गई फ़ाइलें" देखना चाहता हूं। – acemtp

+0

मैंने एक संशोधित संस्करण – acemtp

1

क्या आप इसे प्रतिक्रियाशील बनाना चाहते हैं? या, मांग पर?

प्रतिक्रियाशील के लिए, hooks देखें। लिपि को इसके उद्देश्य के अनुसार नामित करना होगा: प्री-प्रतिबद्ध.बैट, पोस्ट-प्रतिबद्ध.बैट। स्क्रिप्ट के रूप में कहा जाता है: [स्क्रिप्ट] [रेपोस-पथ] [संशोधन-संख्या]

, के लिए ऑन-डिमांड:

  • कार्य कॉपी
    • SVN लॉग
    • svn st
    • svn diff
    • SVN proplist
  • भंडार
    • svnlook लेखक
    • svnlook बदल
    • svnlook तारीख
    • svnlook diff
    • svnlook इतिहास

उदाहरण:

svn st "C:\path\to\working\directory\" >> C:\path\to\working\project.log 

हर बार जब आप बैट चलाने के लिए, यह परियोजना के लिए सेंट उत्पादन जोड़ देंगे। लॉग। आवश्यकतानुसार समायोजित करें।

+0

मांग पर। मुझे svn कमांड पता है (यह उन्हें eveyrwhere खोजने में आसान है)। यदि: सवाल उपयोग करने के लिए कैसे है कि एक .bat स्क्रिप्ट – acemtp

+0

में मैं एक लॉग फ़ाइल :) मैं .bat का कोड की तरह कुछ करना चाहते हैं में स्थिति डाल करने के लिए नहीं करना चाहते हैं पता करने के लिए है (svn_changed()) यह अन्य करें – acemtp

3

ठीक है, समाधान मैं Tooony की मदद से पाया:

set vHEAD = 0 
set vBASE = 0 

set svnDir=<path to local svn directory> 

for /F "tokens=1,2" %%I in ('svn info -r HEAD %svnDir%') do if "%%I"=="Revision:" set vHEAD=%%J 
for /F "tokens=1,2" %%I in ('svn info -r BASE %svnDir%') do if "%%I"=="Revision:" set vBASE=%%J 

if "%vBASE%"=="%vHEAD%" (
    echo No changes 
) else (
    echo Changed files! 
) 
2

अपने लो।बल्ले निष्पादित svnversion (यदि आप सबवर्सन का उपयोग कर रहे हैं) या SvnWCRev.exe (यदि आप टोर्टोइज एसवीएन का उपयोग कर रहे हैं) तो अपनी कार्यशील प्रतिलिपि के शीर्ष-स्तर के विरुद्ध निष्पादित करें।

आपकी आउटपुट प्रति संशोधित होने पर दोनों आउटपुट संशोधित किए गए हैं।

svnversion अपने आउटपुट में "एम" जोड़ता है। SvnWCRev.exe डब्ल्यूसी को संशोधित किए गए पाठ की एक पंक्ति मुद्रित करेगा।

0

यह संस्करण @ सद्भावना पर आधारित है लेकिन क्लाइंट के बजाय अपडेट के लिए सर्वर की जांच करता है।

@echo off 
set svnOut= 

rem Check svn server status of current working directory repository and see if first or second token is an * 
for /F "tokens=1" %%I in ('svn status --show-updates') do if "%%I"=="*" set svnOut=%%I 
rem echo "%svnOut%" 

if "%svnOut%"=="" (
    echo No changes 
) else (
    echo Changed files! 
) 
संबंधित मुद्दे