केवल एक फ़ाइल बनाम दूसरे की तुलना में मुश्किलें अधिक जटिल हो सकती हैं। पूरी निर्देशिका पदानुक्रम की तुलना कर सकते हैं। उदाहरण पर विचार करें कि मैं जीसीसी में बग को ठीक करना चाहता हूं। मेरा परिवर्तन 4 या 5 फ़ाइलों में एक पंक्ति या दो जोड़ता है और उन और अन्य फ़ाइलों में मुट्ठी भर लाइनें हटाता है। अगर मैं इन परिवर्तनों को किसी को बताना चाहता हूं, तो संभवतः जीसीसी में शामिल करने के लिए मेरे विकल्प हैं
- संपूर्ण स्रोत वृक्ष की नकल करें
- केवल उन फ़ाइलों की प्रतिलिपि बनाएँ जिन्हें बदला गया था
- मेरे द्वारा किए गए परिवर्तनों की आपूर्ति करें
पूरे स्रोत के पेड़ की नकल करने का कोई मतलब नहीं है, लेकिन अन्य दो विकल्पों के बारे में क्या है, जो आपके प्रश्न के मूल में है। अब विचार करें कि किसी और ने भी उसी फ़ाइल पर काम किया है जैसा मैंने किया था और हम दोनों किसी को अपने परिवर्तन देते हैं। इस व्यक्ति को कैसे पता चलेगा कि हमने क्या किया है और यदि परिवर्तन संगत हैं (फ़ाइल के अलग-अलग हिस्से) या संघर्ष (फ़ाइल की समान लाइनें)? वह उन्हें अलग कर देगा! यह अंतर उसे बता सकता है कि फाइलें एक दूसरे से और अनमॉडिफाइड सोर्स फाइल से कैसे भिन्न हैं। यदि अंतर है कि क्या जरूरत है, यह सिर्फ पहली जगह में अंतर भेजने के लिए और अधिक समझ में आता है। एक अंतर में एक से अधिक फ़ाइल से परिवर्तन भी हो सकते हैं, इसलिए जब मैंने कुल 9 फ़ाइलों को संपादित किया, तो मैं उन परिवर्तनों का वर्णन करने के लिए एक एकल फ़ाइल प्रदान कर सकता हूं।
इतिहास प्रदान करने के लिए भी मुश्किलों का इस्तेमाल किया जा सकता है। क्या होगा अगर तीन महीने पहले एक बग के कारण मैंने केवल आज ही खोजा था। अगर बग को पेश किया गया था तो मैं इसे कम कर सकता हूं और इसे एक विशिष्ट बदलाव के लिए अलग कर सकता हूं, मैं "पूर्ववत" करने के लिए अंतर का उपयोग कर सकता हूं या परिवर्तन को वापस कर सकता हूं। यह कुछ ऐसा नहीं है जिसे मैं आसानी से कर सकता हूं अगर मैं केवल फाइलों की नकल कर रहा हूं।
स्रोत संस्करण नियंत्रण में यह सभी संबंध जहां कार्यक्रम फाइलों के इतिहास को उस समय तक अलग-अलग श्रृंखलाओं के रूप में दर्ज कर सकते हैं, जो आज तक बनाए गए थे। फ़ॉर्म्स इतिहास प्रदान करते हैं (मैं फ़ाइल को फिर से बना सकता हूं क्योंकि यह किसी विशेष दिन पर था), मैं देख सकता हूं कि किसी चीज़ को तोड़ने के लिए किसे दोषी ठहराया जाए (फ़र्क एक मालिक है) और मैं आसानी से अपस्ट्रीम प्रोजेक्ट्स में बदलाव करके उन्हें विशिष्ट अंतर दे सकता हूं ( शायद वे केवल एक बदलाव में रुचि रखते हैं जब मैंने कई बनाये हैं)।
संक्षेप में, हाँ, cpकी तुलना में आसान है diffऔर patchहै, लेकिन की उपयोगिता diffऔर patchसे बड़ा है cpस्थितियों में, जहां कैसे फ़ाइलों परिवर्तन ट्रैक करने के लिए महत्वपूर्ण है के लिए।