क्या कोई संस्करण नियंत्रण प्रणाली है जो किसी विशिष्ट विधि या फ़ंक्शन में परिवर्तन दिखा सकती है? [बन्द है]


11

कभी-कभी कुछ कहना अच्छा होगा:

(git|svn|hg|etc) diff Foo.c:main
(git|svn|hg|etc) log log Foo.c:main

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

  1. क्या कुछ मौजूद है जो ऐसा करता है?
  2. क्या ऐसा उपकरण व्यावहारिक होगा? यह फ़ंक्शन के विभिन्न संस्करणों की तुलना करने के लिए प्रत्येक संशोधन में कोड के कुछ सरल पार्सिंग करना होगा; क्या ओवरहेड कुशल होने के लिए बहुत अधिक होगा?

7
इसकी आवश्यकता इस तरह लगती है कि यह एक अंतर्निहित समस्या का लक्षण होगा, जैसे कि विधियाँ बहुत बड़ी या कक्षाएं ठीक से व्यवस्थित न होना, क्योंकि इसके नमक के लायक कोई VCS आपको कक्षा का एक अलग रूप देगा, और इसे नीचे स्क्रॉल करना काफी आसान है यदि कक्षा बहुत बड़ी नहीं है, तो प्रश्न में विधि के लिए (या खोज करें) और आपको पूरी कक्षा के संदर्भ में विधि में कोड देखने को मिलता है। संक्षेप में, मुझे लगता है कि विधि संकल्प बहुत विशिष्ट है।
रॉबर्ट हार्वे

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

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

जवाबों:


14
  1. जहां तक ​​मेरी जानकारी है, ऐसा नहीं है। एक हो सकता है, लेकिन मैं यह उम्मीद नहीं करूंगा कि अगर वह ऐसा करता है तो उत्पादन गुणवत्ता हो सकती है।
  2. मुझे नहीं लगता कि यह व्यावहारिक है, लेकिन इस कारण से नहीं कि आपने सूचीबद्ध किया है। यह व्यावहारिक नहीं है क्योंकि वीसीएस को उस तरह की कार्यक्षमता का समर्थन करने के लिए भाषा से अवगत होना होगा। अनिवार्य रूप से, आपको भाषा पाठ को पार्स करने के लिए कुछ एम्बेड करने की आवश्यकता होगी (एक संकलक बड़े कदमों में से एक)। यह आपके लिए बहुत अधिक अतिरिक्त वजन जोड़ता है VCS, जो पहले से ही काफी जटिल काम कर रहा है।
    लेकिन इससे भी महत्वपूर्ण बात यह है कि आप जिस भाषा का समर्थन करना चाहते हैं, उसके लिए आपको वही काम करना होगा। एक वीसीएस जो केवल सी कोड पर काम करता है, को बहुत अधिक कर्षण नहीं मिल रहा है। यहां तक ​​कि अगर आप सभी अस्पष्ट भाषाओं को अनदेखा करते हैं, तो भी शीर्ष 10 भाषाओं का समर्थन करने के लिए यह एक बड़ा उपक्रम होगा।

और जैसा कि रॉबर्ट ने बताया, एक विधि में तुरंत कूदने में सक्षम होना, विधा उपकरण के भीतर विधि के लिए मैन्युअल रूप से कूदने में बहुत बड़ा लाभ नहीं है।


4
मैं भाषा पर निर्भरता की बात करता हूं और बहुत अधिक अनावश्यक कोड
रखता

1
हालांकि कोड संपादकों को उजागर करने के खिलाफ एक ही तर्क दिया जा सकता है; उन्हें भाषा-जागरूक होना चाहिए, और वास्तव में मौजूद होना चाहिए। शायद अदायगी थोड़ी अधिक है (कोडेज़ के रंगीन स्क्रीन!)। मैं मानता हूं कि पार्सिंग शायद सबसे कठिन हिस्सा होगा। यह सबसे कठिन भाषाओं का समर्थन करना कठिन नहीं होगा, खासकर जब से आपको कार्यक्रम को पूरी तरह से पार्स करने की आवश्यकता नहीं है।
jches

8

svn वास्तव में आप क्या चाहते हैं के करीब कुछ करता है।

आप कमांड का उपयोग कर सकते हैं:

svn diff -x -p program.c 

-x -p परिवर्तन सेट की चोटी पर प्रदान करता है 'सी' समारोह नाम। जो इस तरह दिखता है।

@@ -97,6 +102,8 @@ int function1(int *x)

यह फ़िल्टर नहीं करता है लेकिन आप अपने उद्देश्य की बारीकी से सेवा करने के लिए grep / खोज कर सकते हैं।

मुझे लगता है कि यह केवल 'सी' (या C / C ++) के लिए है। हालाँकि, मुझे लगता है, अगर कोई मांग है तो svn इसे अन्य भाषाओं के लिए भी उपलब्ध कराएगा।

मैं इस तर्क के लिए पर्याप्त नहीं है कि वीसीएस को ऐसा नहीं करना चाहिए । आखिर हम चाहते हैं कि सभी IDE या संपादक (जैसे VIM, EMACS) सिंटैक्स हाइलाइटिंग करें जो प्रत्येक भाषा के लिए विशिष्ट हो और एक साथ कई का समर्थन करें। तो वीसीएस एक डेवलपर टूल होने के नाते, इस तरह की कार्यक्षमता का समर्थन करना चाहिए।

बेशक, आपके सवाल के लिए धन्यवाद कि मैंने इसे खोजा। मैंने पहले कभी इसका इस्तेमाल नहीं किया था।


1

बारीकियों में जाने के बिना, ... लेकिन आप सिमेंटिक डिज़ाइन साइट और उनके उत्पादों की सीमा देख सकते हैं। वे कुछ उपकरण प्रदान करते हैं जो भाषा के प्रति संवेदनशील होते हैं , इसलिए बेहतर अवधि के अभाव में कहने के लिए।



-1

यह दिखाने के लिए कि संशोधन और लेखक ने पिछली बार किस फ़ाइल की प्रत्येक पंक्ति को संशोधित किया है:

git blame filename

1
सच है, लेकिन क्यू एक फ़ाइल के भीतर एक विशेष विधि में परिवर्तन के लिए खोज करने के लिए एक रास्ता पूछता है। कल्पना करें कि किसी दिए गए फ़ाइल में 100 संशोधन हैं, और उनमें से आपको उन लोगों को ढूंढना होगा जिनमें किसी विशेष फ़ंक्शन में परिवर्तन शामिल हैं।
कालेब

संस्करण नियंत्रण सिंटैक्स विवरण के बारे में नहीं जानता है, और फाइलों के प्रकारों की भी परवाह नहीं करता है।
गीता

-1

ENVY और StORE दोनों ऐसा करते हैं। यह दिलचस्प है कि जैसा कि मोनिकेलो के साथ है कि लोगान कैपल्डो ने ऊपर उल्लेख किया है, ये भी स्मॉलटाक के लिए हैं।

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