मैं एक गिट रिपोजिटरी में संग्रहीत एक बहु-वर्ष के इतिहास से “ हीटमैप ” बनाने का प्रयास कर रहा हूं जहां ग्रैन्युलरिटी की इकाई व्यक्तिगत कार्य है। कार्य अधिक गर्म हो जाते हैं, अधिक बार, और अधिक गैर-खाली रेखाओं के साथ बदलते हैं।मैं सी कोड के गिट रिपोजिटरी में फ़ंक्शंस के साथ बदली गई लाइनों को कैसे जोड़ूं?
एक शुरुआत के रूप में, मैं
git log --patch -M --find-renames --find-copies-harder --function-context -- *.c
के उत्पादन में मैं Hackage से Language.C का उपयोग कर को देखा की जांच की है, लेकिन यह पूरी तरह से अनुवाद इकाई — विस्तार हेडर चाहते करने लगता है और सभी — बल्कि एक से निपटने के लिए सक्षम किया जा रहा स्रोत खंड
--function-context
विकल्प संस्करण 1.7.8 के बाद नया है। कार्यान्वयन in v1.7.9.4 is a regex की नींव:
PATTERNS("cpp",
/* Jump targets or access declarations */
"!^[ \t]*[A-Za-z_][A-Za-z_0-9]*:.*$\n"
/* C/++ functions/methods at top level */
"^([A-Za-z_][A-Za-z_0-9]*([ \t*]+[A-Za-z_][A-Za-z_0-9]*([ \t]*::[ \t]*[^[:space:]]+)?){1,}[ \t]*\\([^;]*)$\n"
/* compound type at top level */
"^((struct|class|enum)[^;]*)$",
/* -- */
"[a-zA-Z_][a-zA-Z0-9_]*"
"|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
"|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
यह सीमाओं पहचान करने के लिए काफी अच्छा है, लेकिन हमेशा diff हंक, जैसे की पहली पंक्ति के रूप में कार्य छोड़ ’ टी नहीं करता है लगता है, #include
शीर्ष पर या एक हंक के साथ निर्देश जिसमें कई फ़ंक्शन परिभाषाएं हैं। प्रत्येक समारोह के लिए अलग-अलग शिकारी उत्सर्जित करने के लिए भिन्नता बताने का विकल्प वास्तव में उपयोगी होगा।
यह ’ टी सुरक्षा-महत्वपूर्ण है, इसलिए मैं कुछ यादों को सहन कर सकता हूं। क्या इसका मतलब है कि मेरे पास ज़विंस्की ’ एस “two problems” है?
बहुत ही रोचक सवाल! अंत में कुछ "मैं गिट करने के लिए नया हूं, मैं एक प्रतिबद्धता पूर्ववत कैसे करूं?" के अलावा कुछ और। भारी तोपखाने के लिए इंतजार कर रहे हैं (यानी वॉनसी) :) – ralphtheninja
क्या आप कृपया स्रोत भाषा की पुष्टि करेंगे सी या सी ++? – gbulmer
@gbulmer स्रोत भाषा सी है 'गिट diff' सी और सी ++ में फ़ंक्शन परिभाषाओं को पहचानने के लिए आंतरिक रूप से समान पैटर्न का उपयोग करती है। –