2015-01-19 9 views
17

मैं एरिक सिंक द्वारा संस्करण नियंत्रण की मूल बातें जानने के लिए कोशिश कर रहा हूँ करते हैं - http://ericsink.com/vcbe/vcbe_usletter_lo.pdfमर्ज संघर्ष का समाधान करना है जब मैं SVN अद्यतन

मैं अब पेज 22 पर हूँ। मैं आपके लिए परिदृश्य का वर्णन करूंगा। उसी कंप्यूटर पर दो उपयोगकर्ता, हैरी और सैली लॉटरी.c नामक फ़ाइल पर काम कर रहे हैं जिसे लॉटरी नामक रेपो में संग्रहीत किया जाता है।

1 - हैरी पहले/प्रारंभिक कोड करता है। 2 - सैली इसे बदलता है और करता है। 3 - 2 हो रहा है, वहीं हैरी बदलाव नहीं किया है, लेकिन प्रतिबद्ध नहीं। 4 - हैरी काम करता है और एक त्रुटि प्राप्त करता है।

Transmitting file data .svn: Commit failed (details follow): 
svn: File '/lottery.c' is out of date 

5 - इसे ठीक करने के हैरी svn update का उपयोग कर अपने स्थानीय प्रतिलिपि अद्यतन करेगा।

यह जहां मैं एक समस्या है है! लेखक का कहना है कि उत्पादन होता है:

lottery harry$ svn update 
G lottery.c 
Updated to revision 2. 

लेकिन, मेरी उत्पादन होता है:

lottery harry$ svn update 
Updating '.': 
C lottery.c 
Updated to revision 2. 
Conflict discovered in file 'lottery.c'. 
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge, 
     (mc) my side of conflict, (tc) their side of conflict, 
     (s) show all options: 

मैं नया हूँ और मैं इस संदेश का जवाब करने के लिए कैसे पता नहीं है। क्या मेरी पुस्तक गलत है? क्रिप्या मेरि सहायता करे। धन्यवाद।

+0

मैं अब के लिए टीसी उपयोग कर रहा हूँ उपयोग करने के लिए सबसे अच्छा विकल्प पर फैसला कर सकते हैं। मुझे लगता है कि लेखक का मतलब हो सकता है। – Steam

उत्तर

30

आप एक बार में एक ही फाइल को बदलने से अधिक लोगों के होते हैं, तो यह बहुत संभव है दोनों एक ही लाइनों को बदलने के लिए के लिए। यह आपके साथ हुआ है। सैली एक ही पंक्तियों को बदलती है जो हैरी बदल रही थीं। जब हैरी ने svn update किया, सबवर्सन ने इसका पता लगाया, और आपसे पूछ रहा है कि क्या करना है।

चेतावनी का एक शब्द: कभी-कभी सबवर्जन केवल आपके संस्करण और उनके संस्करण के बीच एक पंक्ति में अंतर की तलाश कर रहा है, और अर्थपूर्ण अंतर नहीं है। उदाहरण के लिए, यदि किसी रेखा का इंडेंटेशन बदल दिया गया था, या अंतर अलग था, या यदि आपने लाइन एंडिंग बदल दी है, तो सबवर्सन इसे एक संघर्ष के रूप में घोषित करेगा, भले ही यह संभवतः न हो। शायद यही कारण है कि पुस्तक को यह मुद्दा नहीं मिला, लेकिन आपने किया। इसका मतलब यह नहीं है कि आपने कुछ भी गलत किया है।

क्या करना है? सबवर्सन आपको कुछ विकल्प दे रहा है।

  • स्थगितपी: यह क्या मैं आमतौर पर स्थिति के इस प्रकार के साथ क्या है।तोड़फोड़ फ़ाइल में एम्बेड जाएगा diff मार्करों कि फाइल में इस तरह दिखेगा:

 

<<<<<<< .mine 
foobar 
======= 
fubar 
>>>>>>> .rxxx 

यह आपको संशोधन rxxx में परिवर्तन दिख रहा है (क्या सैली किया था) बनाम की तरह लग रहे आपके पास परिवर्तन (हैरी के परिवर्तन)। आम तौर पर, परिवर्तन इतने छोटे होते हैं कि यह पता लगाना बहुत आसान है कि क्या करना है।

  • शो diffdf: यह आप (हैरी) अपने परिवर्तन के बीच मतभेद और क्या अन्य संशोधन में है (सैली) दिखाई देगा। यह मूल रूप से आपको diff मार्कर दिखाता है।
  • संपादित करें: आप विलय संघर्ष को संपादित कर सकते हैं क्योंकि आप बाद में प्रतीक्षा करने के बजाय मर्ज करते हैं।
  • मर्जएम: यह भी सुनिश्चित नहीं है कि यह क्या करता है। आप अभी विलय कर रहे हैं, इसलिए यह बहुत अधिक समझ में नहीं आता है।
  • संघर्ष के उनके पक्षटीसी: संघर्ष को हल करने के लिए सैली ने क्या किया है स्वीकार करें। आपको शायद अपने बदलावों को फिर से करना होगा, लेकिन कम से कम आप सैली के बदलावों पर विचार कर रहे हैं।
  • संघर्ष के मेरे पक्षएमसी: सबसे खतरनाक परिदृश्य क्योंकि आप सैली के परिवर्तनों को पूरी तरह से अनदेखा कर रहे हैं। सैली ने एक फिक्स किया, और आप संभवतः इसे अपवादित कर रहे हैं। जब रिलीज निकलता है, और सैली का फिक्स इसमें नहीं होता है, तो आपको बदलाव को हटाने के लिए दोषी ठहराया जाएगा। तो, तुम यह क्यों करते हो? क्योंकि आपने पहले ही बदलावों को देखा है, और महसूस किया कि संघर्ष वास्तव में एक संघर्ष का अधिक नहीं था। यह इंडेंटेशन या कुछ समान में बदलाव था। या आपने एक चर increment कहा है और सैली ने इसे counter कहा है।

जैसा कि मैंने कहा, मैं आमतौर पर एक स्थगित, चलो मेरे अद्यतन खत्म, तो समस्याओं को संभाल कर सकते हैं।

एक बार जब आप समस्या को ठीक कर लेंगे, तो आप उस फ़ाइल पर svn resolved करते हैं ताकि सबवर्सन को पता चल सके कि आपने संघर्ष को ठीक कर दिया है।

और विकल्प हैं - उदाहरण के लिए, आप संघर्ष को संभालने के लिए एक तृतीय पक्ष diff/merge टूल लॉन्च कर सकते हैं।

अधिक जानकारी के लिए, resolving merge conflicts के बारे में लाइन मैनुअल पर सबवर्जन पर नज़र डालें।

1

"जी" इंगित करता है कि फ़ाइल किसी और द्वारा संशोधित की गई थी, लेकिन उस व्यक्ति के संशोधनों ने फ़ाइल के एक अलग हिस्से में थे, इसलिए एसवीएन मदद मांगे बिना आपके लिए इसे विलय कर सकता था।

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

आप शायद कुछ भी गलत नहीं किया है, और पुस्तक गलत नहीं है, वे तो बस क्या विशिष्ट परिवर्तन किया गया है पर विस्तार से बाहर छोड़ दिया, जाहिरा तौर पर।

4

आप s विकल्प को चुनते हैं तो यह आपको दिखाएगा:

(e) edit    - change merged file in an editor 
(df) diff-full  - show all changes made to merged file 
(r) resolved   - accept merged version of file 

(dc) display-conflict - show all conflicts (ignoring merged version) 
(mc) mine-conflict - accept my version for all conflicts (same) 
(tc) theirs-conflict - accept their version for all conflicts (same) 

(mf) mine-full  - accept my version of entire file (even non-conflicts) 
(tf) theirs-full  - accept their version of entire file (same) 

(p) postpone   - mark the conflict to be resolved later 
(l) launch   - launch external tool to resolve conflict 
(s) show all   - show this list 

उपयोग dc confilicts देखने पर तो आप

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