Io uso git-svn per mantenere un clone di un repository Subversion condiviso. Recentemente qualcuno ha modificato il messaggio di commit di una revisione (a lathis SO question) dopo che avevo la revisione git svn fetch
. Come posso correggere il mio clone Git per avere il messaggio di commit corretto?Riparazione del repository git-svn dopo la revisione storica di Subversion modificata
Mi aspettavo git svn reset
seguito da git svn fetch
per recuperare questo commit e aggiornare le cose, lasciandomi solo bisogno di sistemare le mie filiali locali, ma in realtà non sembra che faccia nulla; lo git svn fetch
non recupera i commit su cui sono stato resettato.
(Sì credo che cambiare il messaggio di commit era una cattiva idea, ma non è qualcosa che ho il controllo su.)
Aggiornamento: ho provato il processo che sleske suggerito (in realtà, avevo provato prima di fare la domanda, ma ho appena provato di nuovo nel caso), ma senza fortuna. Ottengo uscita come di seguito:
[email protected] ~/code ((358a2dd...)) Fri 16 Jan 15:31:27
$ git svn reset -p 55102
r55094 = 25d126219f7eeddfc7d0842704c7efcc0443dd70 (refs/remotes/origin/branchname)
[email protected] ~/code ((358a2dd...)) Fri 16 Jan 15:33:06
$ git svn fetch
[email protected] ~/code ((358a2dd...)) Fri 16 Jan 15:33:08
$
Non c'è alcuna uscita dal git svn fetch
(o non v'è se v'è stato impegna dall'ultima volta che ho fatto funzionare, ma è solo andare a prendere i nuovi commit, non refetching quelli vecchi), e in particolare non c'è il messaggio rereading
come nell'esempio di sleske.
Nel caso sia rilevante, sto usando Git v2.0.4.
Update 2: Leggermente redatto .git/config
di seguito:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[svn-remote "svn"]
url = http://server/repos/repo
fetch = trunk:refs/remotes/origin/trunk
branches = branches/*:refs/remotes/origin/*
tags = tags/v10/*:refs/remotes/origin/tags/*
tags = tags/v11/*:refs/remotes/origin/tags/*
tags = tags/v12/*:refs/remotes/origin/tags/*
tags = tags/v13/*:refs/remotes/origin/tags/*
non posterò l'uscita piena di git branch -avv
, perché c'è un sacco di esso, ma è lì che si fa veramente interessante, così ho' Pubblicherò un elenco di tutto ciò che ho fatto:
Avevo una verifica di un ramo diverso dal ramo con l'errore. L'esecuzione di
git svn reset
non ha fatto alcuna differenza:remotes/origin/branchname
ha continuato a indicare un commit più recente. Non sorprende che logit svn fetch
non abbia fatto nulla.Ho controllato
remotes/origin/branchname
e ho eseguito di nuovogit svn reset
. Questo ha funzionato:remotes/origin/branchname
puntato sul padre del commit duff.Ho eseguito
git svn fetch
. Questo non ha fatto assolutamente nulla: nessun commit è stato prelevato eremotes/origin/branchname
non si è mosso.Ho creato un paio di commit fittizi su quel ramo nel repository Subversion (uno ha aggiunto un file vuoto, il successivo lo ha eliminato di nuovo), quindi ha eseguito
git svn fetch again
.Ecco dove diventa davvero strano: il commit di duff non è stato ripetuto. Invece, il recupero è iniziato al commit in cui ho aggiunto il file fittizio, ha riportato un "errore di indice" nel processo. Il rendering
git show
sul commit che ha aggiunto il file fittizio lo mostra con tutte le differenze tra il commit reimpostato e il dummy commettere.Ora, in esecuzione
git log --graph --decorate --pretty=oneline --abbrev-commit HEAD origin/branchname
assomiglia a questo:* 7b12bbc (origin/branchname) Remove dummy file * 730c2ab Add dummy file # But `git show 730c2ab` includes the diffs between b89af06 and 93920f9 as well | * 93920f9 (HEAD) Uninteresting commit | * 91c7163 Uninteresting commit | * ce51022 Commit with the changed commit message |/ * b89af06 Uninteresting commit
Nota che, oltre
HEAD
, ora c'è niente indicando alcuni dei commit su questo ramo.
sto rapidamente arrivando alla conclusione che almeno una parte di questo comportamento è semplicemente un bug nel git svn
. Certamente quello che ho visto al punto 4 sopra non è qualcosa che dovrebbe accadere, almeno per mia comprensione.
Potresti postare: a) il contenuto di ".git/config" (dove è configurato il comando git-svn remote), e b) l'output di 'git branch -avv' prima e dopo l'invocazione di' git svn reset ... '. Quest'ultimo dovrebbe mostrare cosa succede al ramo di localizzazione remota usato da 'git svn'. – sleske
@sleske Ho aggiunto il '.git/config' come richiesto, e ho fatto un po 'di scavo basato sull'output di' git branch -avv'. È * molto strano *. –
Sì, molto strano, e molto probabilmente un bug in 'git svn'. Temo che per ottenere ulteriore assistenza, dovrai fornire un caso di test riproducibile. Potresti provare a montare uno script che crea un repository SVN locale, quindi eseguirlo tramite 'git svn'. Se si utilizzano lo stesso layout e le stesse opzioni di repo e si creano commit strutturalmente simili, è possibile riprodurre il problema. – sleske