की वृद्धिशील रैखिकरण मैं GitX का लेखक हूं। GitX की सुविधाओं में से एक शाखाओं का दृश्य है, जैसा कि here देखा जा सकता है।गिट डीएजी
यह विज़ुअलाइज़ेशन वर्तमान में काम करने के द्वारा किया जाता है जो सही क्रम में गिट से उत्सर्जित होते हैं। प्रत्येक प्रतिबद्धता के लिए माता-पिता ज्ञात हैं, इसलिए सही तरीके से लेन बनाने के लिए यह काफी आसान है।
मैं अपने स्वयं के प्रतिबद्ध पूल का उपयोग करके और खुद को प्रतिबद्ध करने के लिए इस प्रक्रिया को तेज करना चाहता हूं। यह मुझे मौजूदा लोड किए गए कामों का पुन: उपयोग करने की अनुमति देता है और गिट को उत्सर्जित करने की इजाजत देता है क्योंकि इसे सही क्रम में उत्सर्जित करने की आवश्यकता नहीं होती है।
हालांकि, मुझे यकीन नहीं है कि इसे पूरा करने के लिए क्या एल्गोरिदम उपयोग करना है। यह महत्वपूर्ण है कि इमारत बढ़ती जा रही है, क्योंकि कामों की लोडिंग में काफी समय लग सकता है (> 100,000 कामों के लिए 5 सेकंड, जो सभी प्रदर्शित किए जाने चाहिए)।
गिटक एक ही तरह से चला गया है, और एक पैच here है जो दिखाता है कि यह कैसे कार्यान्वित किया जाता है, लेकिन मेरे टीसीएल कौशल कमजोर हैं और पैच को बहुत अच्छी तरह से टिप्पणी नहीं की जाती है और इसका पालन करना मुश्किल होता है।
मुझे यह एल्गोरिदम भी कुशल होना पसंद है, क्योंकि इसे सैकड़ों हजारों कामों को संभालना होगा। इसे एक टेबल में भी प्रदर्शित किया जाना चाहिए, इसलिए यह महत्वपूर्ण है कि विशिष्ट पंक्तियों तक पहुंच तेज हो।
मैं अब तक के इनपुट का वर्णन करूंगा, जो आउटपुट मैं चाहता हूं और कुछ अवलोकन।
इनपुट:
- मैं एक हैश तालिका वस्तुओं प्रतिबद्ध करने के लिए आईडी प्रतिबद्ध नक्शे कि के रूप में प्रतिबद्ध के एक वर्तमान पूल है। इस पूल को पूरा नहीं होना चाहिए (सभी आवश्यक हैं)
- मेरे पास गिट से नए कामों में एक अलग थ्रेड लोडिंग है, कॉलबैक के साथ जिसे हर बार एक नई प्रतिबद्धता लोड किया जा सकता है। कोई गारंटीकृत आदेश नहीं है जिसमें कमेटी आती है, लेकिन ज्यादातर मामलों में अगली प्रतिबद्धता पिछले प्रतिबद्धता का अभिभावक है।
- एक प्रतिबद्ध वस्तु का अपना संशोधन आईडी और उसके सभी माता-पिता के संशोधन आईडी
- मेरे पास शाखा प्रमुखों की एक सूची है जो सूचीबद्ध होना चाहिए। यही है, डीएजी का एक भी 'टॉप' नहीं है जिसे प्रदर्शित किया जाना चाहिए। एक ग्राफ ग्राउंड रूट भी नहीं है।
आउटपुट:
- मैं संस्थानिक क्रम में इन प्रतिबद्ध linearize की आवश्यकता होगी। यही है, उसके माता-पिता सूचीबद्ध होने के बाद एक प्रतिबद्धता सूचीबद्ध नहीं की जा सकती है।
- मुझे ऊपर की स्क्रीनशॉट में 'शाखा रेखाएं' भी दिखाई देनी चाहिए। इन्हें शायद पूर्वकंपूर्ण होने की आवश्यकता है क्योंकि उनमें से अधिकतर अपने बच्चों पर निर्भर करते हैं।
कुछ टिप्पणी:
- यह प्रतिबद्ध की एक सूची स्थानांतरित करने के लिए आवश्यक है। उदाहरण के लिए, हमें ऐसा करना पड़ सकता है (शाखा प्रमुख) जो असंबद्ध हैं, जब तक एक प्रतिबद्धता दिखाई न दे, जिससे एक सिर दूसरे के पूर्वजों को बना देता है।
- एकाधिक शाखा युक्तियाँ
- यह महत्वपूर्ण है कि यह प्रक्रिया बढ़ती जा रही है, ताकि कम से कम आंशिक दृश्य उपलब्ध हो, जबकि डेटा अभी भी लोड हो रहा है। इसका मतलब है कि नए डेटा को आधा रास्ते डालना होगा और शाखा लाइनों को समायोजित करना होगा।
यह संभव हो सकता है, मैं इसे देख लूंगा। मुझे लगता है कि ग्राफ लाइनों की गणना करना अधिक महंगा है, जिसे मैं अब कैश करता हूं। उन पंक्तियों की गणना में कुछ समय लगता है (~ 1kcond 100k commits के लिए), इसलिए मैं हर बार फिर से गणना नहीं कर पाऊंगा। मुझे इसके लिए अभी भी कुछ वृद्धिशील अद्यतन की आवश्यकता होगी। – Pieter