I tag possono essere spostati automaticamente dopo un filtro-ramo git e rebase?
-
01-10-2019 - |
Domanda
modifica La questione si riduce a "Può git rebase
essere istruiti a rebase tag, anche tu?" Ma una risposta alla domanda iniziale contribuirebbe anche.
Come anteporre il passato in un repository git? ho seguito queste istruzioni . << strong> modifica > Poi ho aggiornato alla includere un file che è stato solo nelle istantanee, vedere qui . << strong> / Modifica > Poiché la storia è stata riscritta (da git filter-branch
o git rebase
o entrambi?) tutti i tag sono ancora sulla linea del tempo originale * e mi piacerebbe un po 'come a loro passare al nuovo. Credo di aver fatto tutto con tag univoci-messaggi di commit così ho potuto provare a scrivere uno script che li usa, ma un git move-tags <from> <to>
più generale sarebbe meglio.
Quindi, c'è un modo per affrontare "il commit che è N commit dopo sulla nuova linea temporale in modo tale che l'ennesimo commit dopo sulla vecchia linea temporale è etichettato"? Qualsiasi altra soluzione se non il ri-etichettatura manuale ovvia sarebbe anche ottimo.
(non esitate a correggere tale terribilmente lunga frase in parole povere ...)
*) hey, git risolto il nonno-paradosso!
Soluzione
Ho scritto uno script che fa questo.
$ 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
[...]
Ma ancora meglio, utilizzare l'opzione --tag-name-filter
integrato in git-filtro-ramo (1).
Altri suggerimenti
Non c'è costruito in modo di fare ciò che si desidera utilizzare git. 'Git rebase --tags' potrebbe essere interessante, ma non esiste.
Se il commit messaggi sono identici come dici allora si potrebbe passare attraverso ogni tag nei rif / tag, fanno:
'git log -1 --pretty=oneline <tagname>'
Confronto messaggio di commit per l'elenco completo:
'git log --pretty=oneline <newbranches>'
Se si trova una corrispondenza (e l'hash SHA1 è diverso) poi fare:
'git tag --force <tagname> <new SHA1>'
Secondo Thomas Rast a http: //git.661346 .n2.nabble.com / Rebase-con-tag-td5582971.html :
Leonid Podolny ha scritto:
E 'possibile, almeno, per ricevere una serie di (vecchio commit, nuovo commit) coppie, in modo che io scrivere un piccolo script che farà questo per me?
Il gancio post-riscrittura ottiene questo elenco, in modo da poter utilizzare che se si vuole a.
C'è un modo per fare git filter-branch
aggiornare automaticamente i tag modificati utilizzando l'opzione --tag-name-filter
, come descritto in questa risposta .
Ho messo insieme la mia implementazione di Python, git rebasetags
Nel caso in cui il rebase è interattiva, si sarà presentato con una shell bash in cui è possibile apportare le modifiche. All'uscita quel guscio, verranno ripristinati i tag.