2010-07-19 9 views
14

Recentemente ho avuto un oggetto danneggiato nel mio repository, puntato sul mio HEAD (l'oggetto era vuoto). È successo dopo aver interrotto un comando git-svn. Quindi, ho ripristinato il mio repository cambiando manualmente i ref su questo oggetto.git-svn recupero/rebase non riuscito dopo aver tentato di riparare un file corrotto

Ora, voglio sincronizzare il repository git con SVN, ma git svn fetch restituisce:

fatal: Invalid revision range 5a5dc92cd3083960fb4828ae387a32cda0554fa8..refs/remotes/a-branch 
rev-list --pretty=raw --no-color --reverse 5a5dc92cd3083960fb4828ae387a32cda0554fa8..refs/remotes/a-branch --: command returned error: 128 

5a5dc92cd3083960fb4828ae387a32cda0554fa8 si riferisce all'oggetto danneggiato, vorrei dire git-svn non considerare questo oggetto, ma un altro, ma non so come hackerarlo.

Se qualcuno sa dove/come git-svn memorizza internamente questo valore sarebbe fantastico.

Grazie

risposta

17

se avete svn metadati memorizzati con i messaggi di commit (quelli http://svn.…./svn/[email protected] (<id>)), è possibile eliminare i file .rev_map.<id> dalle .git/svn/… directory.

git-svn verrà quindi ricreato prima dell'esecuzione del comando successivo.

Edit: Quando si esegue git gc se si vede l'uscita lungo le linee di:

$ git gc 
warning: reflog of 'HEAD' references pruned commits 
warning: reflog of 'refs/heads/master' references pruned commits 
warning: reflog of 'refs/remotes/trunk' references pruned commits 

allora sapete che è necessario eseguire il trucco sopra. In questo caso:

rm .git/svn/refs/remotes/trunk/.rev_map.* 
+0

Ho modificato la risposta per renderlo più chiaro che il nel rev_map viene dal riferimento precedente, dal momento che ho lavorato fuori quello che era necessario da un altro riferimento sul web. –

Problemi correlati