2009-08-07 10 views
23

अक्सर मैं काम कर प्रति एक तोड़फोड़ के बीच में बैठा हूँ एक दिया तोड़फोड़ के रूट फ़ोल्डर कैसे मिल सकता है, और मैं एक त्वरित svn status करने के लिए पता लगाने के लिए क्या परिवर्तन मैं पिछले के बाद से बना दिया है चाहता हूँ चेक इन। हालांकि svn status केवल वर्तमान फ़ोल्डर और उसके बच्चों पर काम करता है। (इसी के लिए भी svn up)मैं काम कर प्रति

मैं तो मैं एक svn status चलाने के लिए और बदल गया है कि सभी फ़ाइलें, शायद एक चेकइन या एक अद्यतन देख सकते हैं एक त्वरित तरीका तोड़फोड़ काम कर प्रतिलिपि के रूट फ़ोल्डर को बदलना चाहते हैं , और फिर उस काम पर वापस आएं जहां मैं पहले था।

उत्तर

14

यहाँ एक जवाब पर मेरी पहली जाने है: मैं एक छोटे से बैश स्क्रिप्ट svnbase बुलाया लिखा है:

#!/bin/bash -u 

# this command outputs the top-most parent of the current folder that is still 
# under svn revision control to standard out 

# if the current folder is not under svn revision control, nothing is output 
# and a non-zero exit value is given 

parent="" 
grandparent="." 

while [ -d "$grandparent/.svn" ]; do 
    parent=$grandparent 
    grandparent="$parent/.." 
done 

if [ ! -z "$parent" ]; then 
    echo $parent 
else 
    exit 1 
fi 

तो अब मैं यह कर सकता:

[~/work/scripts/XXX/code/speech-detection/framework]$ cd $(svnbase) 
[~/work/scripts/XXX]$ svn status 
?  code/speech-detection/framework/output.old 
[~/work/scripts/XXX]$ cd - 
/home/XXXX/work/scripts/XXX/code/speech-detection/framework 
[~/work/scripts/XXX/code/speech-detection/framework]$ 
+0

अगला तार्किक कदम आदेशों आप में टाइप कर रहे हैं की उस श्रृंखला को एकीकृत करने की होगी खुद स्क्रिप्ट –

+2

यदि आप किसी रिश्तेदार के बजाय एक पूर्ण पथ पसंद करते हैं, तो आरंभ करें: 'दादाजी = $ (pwd) ', और प्रत्येक पाश:' दादाजी = $ (डायरनाम पैरेंट) ' –

+5

यह केवल सबवर्सन संस्करणों के लिए 1.6 तक काम करेगा । संस्करण 1.7 और बाद में रूट फ़ोल्डर में केवल एक '.svn' फ़ोल्डर है। – ccpizza

2

यह संभव नहीं है। किसी भी गहराई से एसवीएन की जांच की जा सकती है, और ब्रांड के नए चेकआउट जैसे किसी भी उप-कार्यकर्ता कार्य करता है।

संपादित करें: पिछला टिप्पणी में svnbase स्क्रिप्ट काम करता है, लेकिन यह सटीक नहीं है।

+1

सटीक से आपका क्या मतलब है? –

+1

अभिभावक निर्देशिका किसी अन्य भंडार का चेकआउट हो सकती है। – stepancheg

7

यदि आप अपने सबवर्सन क्लाइंट के रूप में git-svn का उपयोग करते हैं, तो आप स्थानीय रूप से गिट कमांड का उपयोग करके एक सबवर्जन रिपोजिटरी के साथ पारदर्शी रूप से बातचीत कर सकते हैं। Git स्वचालित रूप से आप पूरे भंडार भर में लंबित है जब आप ट्री में कहीं git status तरह आदेशों का उपयोग को दर्शाता है।

2

असल में, यदि आप अपनी .svn/प्रविष्टियों फ़ाइल में देखते हैं, तो आपको आमतौर पर लाइन 6 के आसपास सूचीबद्ध आधार मिलेगा। किसी भी घटना में, आपके svn url का प्रारूप आपको कुछ महत्वपूर्ण संकेत देगा: पी ओह हाँ, मैंने देखने की स्वतंत्रता ली, और svn info आपको भी बताएगा।

... श्वास, यह वही नहीं है जो आपने पूछा था। मैं पहली बार जवाब में समाधान चाहते: पी

+1

एसवीएन जानकारी चीज आपकी रिपोजिटरी की जड़ सूचीबद्ध करती है, हालांकि कामकाजी प्रति नहीं। इसलिए यदि आप पूरे भंडार की जांच नहीं करते हैं, तो यह मदद नहीं करेगा, जबकि उपरोक्त 'svnbase' अभी भी होगा। –

+1

हाँ, सहमत हुए। +1 :) – stran

+2

एसवीएन 1 के साथ।7 svn जानकारी कार्यशील प्रतिलिपि रूट सूचीबद्ध करेगा। – Janosch

6

विंडोज पर:

svn info . |findstr /C:"Working Copy Root Path:" 

लिनक्स पर:

svn info . |grep -F "Working Copy Root Path:" 

यह एक चर एक छोटे स्ट्रिंग परिवर्तन का उपयोग कर को सौंपा जा सकता। Windows संस्करण:

FOR /F "delims=" %%i IN ('svn info . ^|findstr /C:"Working Copy Root Path:"') DO SET SOME_TEMP_VAR=%%i 
SET WORKING_COPY_ROOT=%SOME_TEMP_VAR:~24% 
3

SVN, संस्करण 1.9.3 (r1718519), मैं इस चलाने के साथ लिनक्स पर: svn info --show-item wc-root

+0

क्या आपका मतलब डब्ल्यूसी-रूट था? 'svn help info' इसे एक विकल्प के रूप में सूचीबद्ध करता है और यह सही तरीके से काम करता प्रतीत होता है। – Adam

+0

हां यही मेरा मतलब था। मैं प्रतिक्रिया अद्यतन कर दूंगा। –

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