क्या वर्किंग कॉपी को रीसेट करने के लिए एक सबवर्जन कमांड है?


110

क्या कोई एकल सबवर्सन कमांड है जो रिपॉजिटरी में संग्रहीत राज्य के लिए एक कार्यशील प्रतिलिपि "रीसेट" करेगा? कुछ ऐसा है git reset --hardया (हा, हार्ड Git रीसेट unversioned फ़ाइलों को हटा नहीं है!) rm -rf wc && svn co <url> wc

अपडेट: मैं एक साधारण रिवर्ट के बाद नहीं हूं, क्योंकि यह काम की कॉपी में अतिरिक्त फाइलों को नहीं हटाता है। मैं वास्तव में कुछ चाहता हूं जो काम की प्रतिलिपि को हटाने और इसे फिर से जांचने के समान होगा, केवल फिर से डेटा डाउनलोड किए बिना। (स्पष्ट रूप से मुझे सभी अनविज्ञेय परिवर्तनों को खोने का मन नहीं है।)


वर्किंग कॉपी में सभी बदलावों का बदला?
मोरिस

5
आप उन git clean -xdfचीजों को हटाने के लिए उपयोग करेंगे जो स्रोत नियंत्रण में नहीं हैं।
vcsjones

1
@vcsjones: धन्यवाद, git cleanउद्धरण के लिए वह आदमी पेज जिसे मैं ढूंढ रहा हूं: "इसका उपयोग (संभवत: गिट रीसेट के साथ संयोजन के रूप में) किया जा सकता है ताकि एक स्वच्छ निर्माण का परीक्षण करने के लिए एक प्राचीन कार्यशील निर्देशिका बनाई जा सके।" अफ़सोस होता है कि तोड़फोड़ में ऐसा बिलकुल भी नहीं लगता है।
जूल

जवाबों:


180

आप इस तरह पुन: आवर्ती कर सकते हैं:

svn revert --recursive .

स्रोत नियंत्रण के अंतर्गत नहीं आने वाली चीज़ों को हटाने के लिए कोई रास्ता नहीं है (एक रचनात्मक स्क्रिप्ट लिखे बिना)। मुझे लगता है कि आप जो सबसे ज्यादा कर सकते थे, वह सभी फाइलों पर पुनरावृति करना है, फिर उसके परिणाम का grep उपयोग करें svn listऔर यदि grep विफल हो जाता है, तो उसे हटा दें।

संपादित करें : रचनात्मक स्क्रिप्ट का समाधान यहां है: स्वचालित रूप से तोड़फोड़ की गई फ़ाइलों को हटा दें

तो आप एक स्क्रिप्ट बना सकते हैं revertजो लिंक किए गए प्रश्न के उत्तर के साथ जोड़ती है जो आपको सबसे अच्छा लगता है।


3
आप svn cleanupपहले wc पर भी दौड़ना चाह सकते हैं । मर्ज किए गए मर्ज और व्हाट्सएप के बाद सफाई के लिए यह मेरा मानक अभ्यास है।
माइक मिलर

कछुए के पास सफाई संवाद में "अनवांटेड फाइल्स को हटाएं" एक विकल्प भी है।
v.oddou

2
यह अच्छा होगा यदि कमांड लाइन के माध्यम से "अनवांटेड फाइल्स को हटा दें" उपलब्ध था। विशेष रूप से स्वचालित बिल्ड के लिए।
सी। टिवेटल

3
मेरा जवाब देखिए ...
डेनी वेनबर्ग

38

ट्रैक की गई फ़ाइलों को वापस करने के लिए

svn revert . -R

अनट्रैक फ़ाइलों को साफ करने के लिए

svn status | rm -rf $(awk '/^?/{$1 = ""; print $0}')

-rf/ पहली बार में डरावना दिखना चाहिए सकता है, लेकिन एक बार समझ में आया यह इन कारणों के लिए नहीं किया जाएगा:

  1. केवल पूर्ण-अप्रमाणित निर्देशिकाओं को पारित किए गए पैटर्न से मेल खाएगा rm
  2. -rfकी आवश्यकता है, और इन निर्देशिकाओं को नहीं निकाला जाएगा

फिर साफ करने के लिए (ओपी सवाल)

svn revert . -R && svn status | rm -rf $(awk '/^?/{$1 = ""; print $0}')

उपयोग में आसानी के लिए

अपने .bash_aliases में स्थायी उपनाम जोड़ें

alias svn.HardReset='read -p "destroy all local changes?[y/N]" && [[ $REPLY =~ ^[yY] ]] && svn revert . -R && rm -rf $(awk -f <(echo "/^?/{print \$2}") <(svn status) ;)'

2 स्निपेट मेरे लिए काम नहीं करता है:awk: fatal: error reading input file '-': Input/output error
hbogert

मुझे कमांड ?में बचना था awk, अन्यथा यह आउटपुट में सभी लाइनों से मेल खाता थाsvn status
gpanders

23

अपनी स्थानीय कॉपी के उपयोग से सब कुछ हटा दें:

rm -r your_local_svn_dir_path/*

और नीचे दिए गए कमांड का उपयोग करके पुन: सब कुछ वापस कर दें।

svn revert -R your_local_svn_dir_path

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


4
बहुत तेजी से svn सफाई है - गिरवी-उतार-चढ़ाव।
ज़िकेन

7
svn revert . -R

सब कुछ रीसेट करने के लिए।

svn revert path/to/file

एक फ़ाइल के लिए


1
क्या यह काम की नकल में अतिरिक्त अन-वर्धित फ़ाइलों को नहीं हटाता है, है ना?
जूल

@ मुझे लगता है कि ऐसा नहीं है, लेकिन जब से मैंने SVN का इस्तेमाल किया है, तब से मुझे उस पर कुछ नहीं करना है
Abe Voelker

दुर्भाग्य से यह ट्रैक नहीं की गई फ़ाइलों को नहीं छूता है। कोशिश svn वापस -R your_local_svn_dir_path
Znik

7

असंबद्ध फ़ाइलें हटाएं और किसी भी परिवर्तन को वापस लाएं:

svn revert D:\tmp\sql -R
svn cleanup D:\tmp\sql --remove-unversioned

बाहर:

D         D:\tmp\sql\update\abc.txt

1
यह अतिरिक्त स्क्रिप्टिंग के बिना, सबसे अच्छा जवाब है। यह कई svn संस्करणों के साथ सार्वभौमिक और संगत है।
ज़नीक

3

शुद्ध विंडोज cmd / बैट समाधान:

svn cleanup .
svn revert -R .
For /f "tokens=1,2" %%A in ('svn status --no-ignore') Do (
     If [%%A]==[?] ( Call :UniDelete %%B
     ) Else If [%%A]==[I] Call :UniDelete %%B
   )
svn update .
goto :eof

:UniDelete delete file/dir
IF EXIST "%1\*" (
    RD /S /Q "%1"
) Else (
    If EXIST "%1" DEL /S /F /Q "%1"
)
goto :eof

2

OS से वर्किंग कॉपी को डिलीट करें और फिर से देखें कि यह सबसे सरल है, लेकिन जाहिर है कि एक भी कमांड नहीं है।


दर्द धीमा। इसलिए मैं इसके लिए रास्ता तलाश रहा था।
zoul

1
+1, यह अक्सर अजीब समस्याओं को ठीक करने का एकमात्र तरीका है, कम से कम जो मैंने पाया है।
ब्राड

2

बहुत जल्दी और सरल और वही करता है जो आप चाहते हैं

svn status | awk '{if($2 !~ /(config|\.ini)/ && !system("test -e \"" $2 "\"")) {print $2; system("rm -Rf \"" $2 "\"");}}'

/(Configpg.ini)/ मेरे अपने उद्देश्यों के लिए है।

और svn कमांड को जोड़ने के लिए एक अच्छा विचार हो सकता है


2
यह बहुत भयानक है। विंडोज उपयोगकर्ताओं के बारे में क्या? इससे पहले कि संस्करण नियंत्रण उपकरण के रूप में इसे गंभीरता से लिया जा सके, तोड़फोड़ को स्पष्ट रूप से काम करने की जरूरत है।
वॉरेन पी

1

अनटैक की गई फ़ाइलों को हटाने के लिए

मैं ऐसा करने से svn stबैश में रिपोर्ट की गई सभी अनट्रैक फ़ाइलों को सूचीबद्ध करने में सक्षम था :

echo $(svn st | grep -P "^\?" | cut -c 9-)

यदि आप भाग्यशाली महसूस कर रहे हैं, तो आप अनटैक की गई फ़ाइलों को हटाने के echoसाथ बदल rmसकते हैं। या उन फ़ाइलों को कॉपी करें जिन्हें आप हाथ से हटाना चाहते हैं, यदि आप कम भाग्यशाली महसूस कर रहे हैं।


(मैंने बची हुई फाइलों को वापस करने के लिए @ abe-voelker के उत्तर का उपयोग किया: https://stackoverflow.com/a/6204601/1695680 )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.