2014-12-08 8 views
10

मेरी कंपनी git (हम प्रभावी रूप से सीवीएस का उपयोग करते हैं) के साथ भंडार को बनाए नहीं रखती है, लेकिन मैं अपनी खुद की स्वच्छता के लिए स्थानीय रूप से रेपो रखता हूं। अतीत में, मैं bug-report-abcde से संबंधित कहानियां लाना चाहता था। मैं bug-report-abcde खोजने और उन्हें ब्राउज़ करने के लिए प्रतिबद्ध संदेशों के माध्यम से grep कर सकते हैं। अभी, मैं एक Emacs समारोह में एक 'शीर्षक के रूप में वर्तमान शाखा का नाम प्रदान करने के लिए झुका है प्रतिबद्ध:मैं कैसे ट्रैक कर सकता हूं कि एक बार विलय होने के बाद से कहां से आया था?

Title 

Summary summary summary 

Branch: bug-report-abcde 
इस प्रकार

मेरे सवाल यह है: यह सबसे अच्छा तरीका है जो शाखा के मूल स्रोत था मिल रहा है एक प्रतिबद्धता, प्रतिबद्धता के बाद दूसरी शाखा में विलय कर दिया गया है? या git से ही इस जानकारी को निकालने का कोई तरीका है?

+0

गिट डिज़ाइनर ने आपके द्वारा प्राप्त की जाने वाली जानकारी के प्रकार को ट्रैक न करने के लिए जल्दी निर्णय लिया। 2005 से इस मुद्दे के बारे में आप इंटरनेट अभिलेखागार में बहुत गर्म चर्चा कर सकते हैं। अगर आप केंद्रीय सर्वर का उपयोग कर रहे हैं तो नकली तरीके से कुछ तरीके हैं, लेकिन ऐसा लगता है कि यह आपके लिए मामला नहीं है। –

+0

@AndrewC यदि आप एक सूची संदेश ढूंढ सकते हैं जो इसका समर्थन करता है, "नहीं कर सकता" एक स्वीकार्य उत्तर भी है। –

उत्तर

2

गिट डिज़ाइन द्वारा इस जानकारी को ट्रैक नहीं करता है।

http://markmail.org/message/yfb5ihwddjmrstz6

So don't think of it as "git throws away branch identity" as much as 
"git never cared about branch identity in the first place, and doesn't 
think it's relevant." 

आपका शाखा का नाम, सिर्फ इतना है कि है अपने शाखा का नाम। यह सचमुच कुछ भी हो सकता है जो आप चाहते हैं। या आप शाखा के नाम का उपयोग नहीं कर सकते हैं, और अलग-अलग सिर राज्य में रह सकते हैं। दीर्घकालिक, केवल पहुंच योग्यता को संग्रहीत किया जाता है।

यदि आपके पास ऐसी जानकारी है जिसे आप ट्रैक करना चाहते हैं (एक दोष संख्या की तरह), तो आपको इसे प्रतिबद्ध संदेश में शामिल करने की आवश्यकता है।

यदि आप केंद्रीय सर्वर का उपयोग कर रहे हैं तो आप एक प्राप्त हुक सेट कर सकते हैं जो रिमोट शाखा नाम की जानकारी किसी भी तरह से लॉग करता है (उदाहरण के लिए git notes)। मेरी कंपनी इसका इस्तेमाल करती है। मुझे यह केवल अर्ध-उपयोगी लगता है (मुख्य रूप से यदि आप कोड लिखने या धक्का देने वाले व्यक्ति के बजाय प्रोग्राम मैनेजर में चिल्लाना चाहते हैं)।

+0

मैं इस उत्तर को स्वीकार कर रहा हूं क्योंकि यह एक निश्चित स्रोत प्रदान करता है जो दर्शाता है कि सामान्य मामले में यह संभव नहीं है। * कुछ * शाखा के कामों की पहचान करने के लिए एक अच्छा समाधान - जहां मर्ज प्रतिबद्ध था - @ jthill के [उत्कृष्ट उत्तर] (http://stackoverflow.com/a/27435086/1443496) में पाया जा सकता है। –

+1

पूर्णता के लिए - जो केवल मर्ज काम के सबसेट के लिए काम करता है। * अगर * वे एक शाखा से विलय हो गए जो आपके लिए है, और * यदि * प्रतिबद्ध संदेश में शाखा का नाम छोड़ दिया गया है। –

6
merges-introducing() { 
    # merges-introducing $introducing [$descendant] 
    local introducing; 
    if introducing=`git rev-parse $1`; then 
     shift 
     git rev-list --ancestry-path --parents --reverse ^$introducing ${@-HEAD} \ 
     | awk '{seen[$1]=1} NR>1 && !seen[$2] {print $1}' \ 
     | xargs -r git show --oneline --no-patch 
    fi 
} 

विलय इतिहास से एक प्रतिबद्धता को शामिल करने वाले विलयों को ढूंढता है।

git rev-list के --ancestry-path सूचियों नीचे से मूल के लाइन पर केवल करता प्रतिबद्ध (^$introducing यहाँ) शीर्ष (डिफ़ॉल्ट HEAD, अपने वर्तमान चेकआउट) के लिए, --parents उनमें से प्रत्येक, --reverse सूचियों प्रतिबद्ध के लिए माता-पिता देता है सबसे पुराना (पहले $introducing पहले आता है), और पोस्ट-प्रोसेसिंग, awk|xargs, प्रिंट केवल विलय करते हैं जिनके पहले माता-पिता उस वंश के पथ पर नहीं हैं।

जब तक कोई व्यक्ति अंदर नहीं जाता है और मर्ज संदेशों को हाथ से संपादित नहीं करता है, तो उन लोगों के लिए विषय पंक्तियां शाखा नाम और संबंधित (और गैर-फास्टफोर्ड) विलय का कोई भी स्रोत यूआरएल सबसे पुराना होगा।

+0

@ सेनअलेड, क्या यह आपके लिए काम नहीं करता है? – jthill

+0

मेरी माफ़ी; अधिसूचना मेरे इनबॉक्स के माध्यम से फिसल गई होगी। मैं इसे एक दिन या तो अंदर आज़माउंगा। –

+0

यह एक बैश फ़ंक्शन है, हां? बैश में सोर्स किया गया, यह अनिवार्य रूप से केवल सबसे हालिया प्रतिबद्धता दिखाता है, भले ही यह वास्तव में संबंधित है या नहीं। –

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