2013-02-08 23 views
12

git filter-branch चलाने के बाद, मैं पुराने-नए एसएचए की सूची कैसे प्राप्त करूं, जैसा फिल्टर-शाखा द्वारा उनके नए संबंधित प्रतिबद्धता एसएचए में लिखा गया है?मैं 'git filter-branch' से पुराने-> नए पुनर्लेखित एसएचए की सूची कैसे प्राप्त करूं?

उदाहरण के लिए, करने के लिए कुछ इसी तरह:

b19fd985746c1f060f761d42d353e387bec243fb -> c8ab40ef9bae3b58642a8d1e5b90720d093a60b5 
c5ebba1eeb92ca76c0effa32de14178ec7f07db6 -> 4d5a9958b98dbcfa47ce1354bb2af4cc77904639 
705f71543235b872ca3e1067538e36d14044429d -> d2aafbd6e5b91955b62dee34f4a0abf0171ba016 

कहाँ बाएँ कॉलम मूल शास की सूची है, और सही स्तंभ फिल्टर शाखा द्वारा फिर से लिखा जा रहा है के बाद नए शास हैं।

मुझे लगता है कि फ़िल्टर-शाखा के लिए man page एक map फ़ंक्शन का उल्लेख करता है, लेकिन मुझे समझ में नहीं आता कि यह यहां उपयोगी है या यदि इसका उपयोग है, तो इसका उपयोग कैसे करें।

आपकी मदद के लिए धन्यवाद!

उत्तर

18

मुझे इसे बाहर करने के लिए git-filter-branch के लिए स्रोत के चारों ओर पोकिंग करना पड़ा। यह दस्तावेज नहीं है (जहां तक ​​मैं कह सकता हूं), लेकिन पुरानी प्रतिबद्ध आईडी स्पष्ट रूप से $GIT_COMMIT के रूप में निर्यात की जाती है। यह मेरे लिए काम किया:

$ git filter-branch --your-filters-here --commit-filter 'echo -n "${GIT_COMMIT}," >>/tmp/log; git commit-tree "[email protected]" | tee -a /tmp/log' your-branch-here 
[...] 
$ cat /tmp/log 
70d609ba7bc58bb196a2351ba26afc5db0964ca6,d9071b49743701c7be971f76ddc84e76554516c7 
0d1146dcabc00c45fb9be7fe923c955f7b6deb50,cb6813f9aca5e5f26fcc85007c5bb71552b91017 
[...] 

(उस फ़ाइल, ज़ाहिर है, प्रारूप <original commit hash>,<new commit hash> है।)

मैं उत्सुक तरह का यह हालांकि उपयोग करने के साथ क्या कर रहे हैं अपने इरादों हूँ। यह ऐसी जानकारी की तरह प्रतीत नहीं होता है जिसे आपको आम तौर पर पता होना चाहिए कि क्या आप फ़िल्टर-शाखा का उपयोग "दाएं" तरीके से कर रहे हैं (यानी, मौजूदा प्रकाशित इतिहास में हेरफेर नहीं करना)।

+0

बहुत बढ़िया, बहुत बहुत धन्यवाद !! कुछ कारणों से भी मुद्रित हो रहा था, इसलिए मैंने इसे बाहर निकाला। मुझे आउटपुट लाइनों पर आउटपुट होने पर कोई फर्क नहीं पड़ता। चिंता न करें, यह * सार्वजनिक रेपो नहीं है। :-) –

+0

ओह, और ऐसा प्रतीत होता है कि $ GIT_COMMIT को दस्तावेज किया गया है: "$ GIT_COMMIT पर्यावरण चर को फिर से लिखा जा रहा प्रतिबद्धता की आईडी शामिल करने के लिए सेट किया जाएगा" –

+0

आह, अच्छा। यह आश्वस्त है - मुझे बहुत कम चिंता करता है कि यह सिर्फ गिट की अगली रिलीज के साथ काम करना बंद कर देगा। :-) – impl