2010-06-30 24 views
12

संपादित सवाल करने पर निर्भर करता "git rebase टैग भी rebase करने के निर्देश दिए जा सकता है?" लेकिन मूल प्रश्न का उत्तर भी मदद करेगा।टैग को गिट फ़िल्टर-शाखा और रीबेस के बाद स्वचालित रूप से स्थानांतरित किया जा सकता है?


पूछ How to prepend the past to a git repository? मैं these instructions का पालन किया। < संपादित> तो मैं एक फ़ाइल है कि स्नैपशॉट में केवल था शामिल करने के लिए रिबेस, here देखते हैं। < /संपादन> के बाद से इतिहास (git filter-branch या git rebase या दोनों से?) सभी टैग मूल समय रेखा * पर अभी भी कर रहे हैं और मैं किसी भी तरह उन्हें एक नए ले जाना चाहते हैं फिर से लिखा गया था। मुझे लगता है कि मैंने टैग के साथ सभी प्रतिबद्ध संदेश बनाये हैं, इसलिए मैं उन्हें उपयोग करने वाली एक स्क्रिप्ट लिखने का प्रयास कर सकता हूं, लेकिन अधिक सामान्य git move-tags <from> <to> बेहतर होगा।

इसलिए, "प्रतिबद्ध है एन ऐसी नई समय रेखा कि वां वर्ष समय रेखा पर के बाद प्रतिबद्ध पर के बाद करता है टैग है" पता करने के लिए एक तरीका है? स्पष्ट मैनुअल रीटैगिंग को छोड़कर कोई अन्य समाधान भी बहुत अच्छा होगा।

(कृपया सादे अंग्रेजी में है कि बुरी तरह लंबे वाक्य को सही करने के लिए स्वतंत्र महसूस ...)

*) हे, Git दादा-विरोधाभास हल!

+2

से शीर्षक कहते हैं, "rebase" लेकिन के बारे में "फिल्टर शाखा", आप क्या किया दोनों के शरीर में बात करती है (संकेत दिया के रूप में [यहां] (http://stackoverflow.com/ प्रश्न/3150394/कैसे करने वाली हटाना रद्द-ए-फ़ाइल-पहले से हटाए-इन-Gits-इतिहास/3150528 # 3150528))? '--tag-name-filter' के साथ, फ़िल्टर-शाखा टैग को फिर से लिख सकती है, लेकिन अगर कोई बाद में रीबेस शामिल होता है तो इससे मदद नहीं मिलेगी। –

+1

@ क्रिस क्षमा करें, मैंने इसे ठीक किया है। हां, मैंने भ्रष्टाचार + फ़िल्टर-शाखा के बाद 'गिट रिबेस' का उपयोग किया था। बाद के बाद टैग ठीक हैं, और मुझे याद रखना चाहिए था कि रीबेजिंग मूल टैग को बरकरार रखने वाली एक अलग शाखा बनाता है। तो मूल सवाल यह है कि "टैग्स को रीबेज करने के निर्देश भी दिए जा सकते हैं?" –

उत्तर

6

मैंने एक स्क्रिप्ट लिखी है क्या ये।

$ git-rebase-tags master 
Rebasing 107 tags onto 'master' 
Can't rebase tag 'staging-deploy-01' because there are no identical commits on 'master' 
Pointed tag 'v0.0.11' at commit 81e16f2ca1bc7802547bf19c1dba1a68212eafff 
Pointed tag 'v0.0.12' at commit 17051cc28084dd56ae56e96767bceee46217c02d 
Pointed tag 'v0.0.13' at commit 5d795076ba4b33f81d327dcf9bff727cef7771a2 
[...] 

gist.github.com/908381 देखें।

लेकिन फिर भी बेहतर, --tag-name-filter विकल्प Git फिल्टर शाखा में बनाया का उपयोग (1)।

+0

+1 धन्यवाद, स्क्रिप्ट मेरे लिए रूबी के फायदों के बारे में जानने के लिए अच्छा है :) –

+0

क्या स्क्रिप्ट पुराने संदेशों को एनोटेट करने वाले संदेशों को भी स्थानांतरित कर देगी? –

3

वहाँ कोई रास्ता नहीं में बनाया गया है कि आप क्या Git का उपयोग कर करना चाहते हैं। 'गिट रीबेज - टैग्स' दिलचस्प हो सकता है लेकिन यह अस्तित्व में नहीं है।

प्रतिबद्ध संदेश के रूप में आप कहते हैं तो आप refs/टैग में प्रत्येक टैग के माध्यम से जा सकते हैं, समान हैं, तो कार्य करें:

'git log --pretty=oneline <newbranches>' 

:

'git log -1 --pretty=oneline <tagname>' 

पूरी सूची के लिए प्रतिबद्ध संदेश की तुलना करें यदि आपको कोई मिलान मिलता है (और SHA1 हैश अलग है) तो करें:

'git tag --force <tagname> <new SHA1>' 
2

http://git.661346.n2.nabble.com/Rebase-with-tags-td5582971.html पर थॉमस रास्ट के अनुसार:

लियोनिद Podolny लिखा है:

यह संभव, कम से कम, का एक सेट (पुराने प्रतिबद्ध, नई प्रतिबद्ध) जोड़े प्राप्त करने के लिए है, इसलिए है कि मैं एक छोटी सी लिपि लिखूंगा जो मेरे लिए ऐसा करेगी? तो आप यह है कि यदि आप चाहते हैं का उपयोग कर सकते

के बाद फिर से लिखने के हुक, इस सूची में हो जाता है।

+0

दिलचस्प, अगली बार जब मैं इस तरह के एक रिबेस का प्रयास करता हूं तो मैं इसे एक शॉट दूंगा। धन्यवाद! –

2

वहाँ git filter-branch स्वचालित रूप से संशोधित आप अपडेट --tag-name-filter विकल्प का उपयोग टैग बनाने के लिए एक तरह से, के रूप में वर्णित in this answer है।

2

मैं एक साथ डाल दिया है अपने ही अजगर कार्यान्वयन, git rebasetags

मामले में रिबेस इंटरैक्टिव है, यदि आप एक bash खोल जहां परिवर्तन कर सकते हैं के साथ प्रस्तुत किया जाएगा। उस खोल से बाहर निकलने पर, टैग बहाल किए जाएंगे।

enter image description here

this post