2011-07-11 10 views
6

मैंने hg mv -A oldFile newFile किया और गलती से नई फ़ाइल गलत हो गई।Mercurial में एक चाल/नाम बदलें कार्रवाई पूर्ववत करें?

मैंने hg revert newFile किया था, लेकिन अब फाइल जो गायब होने के रूप में दिखायी गई थी (और फिर चाल कमांड के बाद हटाई गई) अब अब बिल्कुल दिखाई नहीं दे रही है।

मैं इसे पूर्ववत कैसे कर सकता हूं और उस राज्य में वापस आ सकता हूं जिसमें मैं था, ताकि नई फ़ाइल अज्ञात के रूप में दिखाई दे और पुरानी फ़ाइल गायब हो जाए?

उत्तर

7
$ hg st 
$ mv a b 
$ hg st 
! a 
? b 
$ hg mv -A a b 
$ hg st 
A b 
R a 
$ hg revert b 
$ hg st 
? b 
$ ls 
a b 

तो hg revert b पुरानी फाइल a बहाल। अब आपको केवल hg mv a correct-name करना है।

+0

धन्यवाद! ऐसा नहीं लगता था कि यह पुरानेफाइल को हटाने को भी वापस कर देगा। –

+0

अंतिम 'ls' शो के रूप में," बी "नाम की फ़ाइल अभी भी मौजूद है, इसलिए मूल प्रश्न का पूरी तरह उत्तर नहीं दिया गया है। यहां चित्रित तकनीक का उपयोग करके, फ़ाइल "बी" को मैन्युअल रूप से हटा दिया जाना होगा। बेशक, दिए गए परिदृश्य में, यदि मूल 'एमवी बी' ने बी को गिरफ्तार किया था, तो बी बी चला गया है। इसके बजाय 'hg mv' का उपयोग करने के लिए और अधिक कारण। – peak

0

यहां एक "अनमोल" स्क्रिप्ट है जिसे बैश में लिखा गया है। शीर्ष पर कुछ सहायता पाठ है। सबसे महत्वपूर्ण बात यह है कि लिपि में एक विकल्प है जो किसी भी फाइल को हटाने को मजबूती से करने के लिए मजबूर करता है।

#!/bin/bash 

# Syntax: $0 [OPTION] DEST 
# 
# This script is mainly intended to undo the effects of: hg move SOURCE DEST 
# 
# It first determines which files have been added globally (as if by 
# hg add), then it runs: 

# hg -v revert DEST 

# Finally, it removes all the files that had been added, 
# and then reverts them as well if possible. 
# 
# OPTIONS: 
# -i :: remove files using rm -i 

if [ "$1" = -i ] ; then 
    INTERACT=$1 
    shift 
fi 


TODO=() 
while read -r f ; do 
    TODO+=("$f") 
done < <(hg st -an "[email protected]") 

function go { 
    hg -v revert "[email protected]" 
    for f in "${TODO[@]}" ; do 
     rm $INTERACT "$f" 
     hg -q files "$f" > /dev/null && hg revert "$f" 
    done 
} 

go