2010-11-15 11 views
7

Sto usando il ponte git-svn e ho rimescolato un gran numero di file nel mio repository, quindi è organizzato un po 'meglio.È sicuro interrompere una chiamata di dcommit che sembra bloccata?

Ho eseguito git svn dcommit per reimpostare le modifiche sul server SVN e il processo sembra essere bloccato. Non utilizzo la CPU e non utilizzo la rete per la chiamata dcommit per gli ultimi 45 minuti. L'uscita è bloccato a:

> git svn dcommit 
...snip... 
    R  zlib/vs2005/zconf.h => tools/zlib/vs2005/zconf.h 
    R  zlib/vs2005/zlib.h => tools/zlib/vs2005/zlib.h 
    R  zlib/vs2005/zlib_ds.lib => tools/zlib/vs2005/zlib_ds.lib 
    R  zlib/vs2005/zlib_ds.pdb => tools/zlib/vs2005/zlib_ds.pdb 
    R  zlib/vs2005/zlib_s.lib => tools/zlib/vs2005/zlib_s.lib 
    R  zlib/vs2005/zlib_s.pdb => tools/zlib/vs2005/zlib_s.pdb 

Ed è qui che è stato per circa 45 minuti ora.

Modifica: alla fine è terminato dicendo che la connessione HTTPS è scaduta. Ciò ha richiesto circa un'ora e mezza per accadere.

io non riesco a trovare tutte le informazioni definitive su ciò che accadrà se interrompo questo dcommit chiamata e quello che avevo bisogno di fare prima di tentare di inviare nuovamente i cambiamenti di nuovo dal mio repository locale al server SVN .

Posso rispondere a una parte della mia domanda: cosa dovrei fare prima di riprovare?

Dopo la connessione scaduta e la mia pronta stato restituito quello che dovevo fare un git svn fetch prima che io potessi correre git svn dcommit di nuovo. Tutte le mie operazioni di rinomina sono state trovate nel repository SVN ma le directory che erano state lasciate vuote dopo lo shuffle non erano state cancellate. Ho dovuto usare il mio client SVN per rimuoverli. Non sono sicuro se si tratta di una cosa git-svn o del timeout HTTPS durante la chiamata a dcommit.

Ancora non conosco la risposta: è possibile interrompere una chiamata di dcommit?

+1

Se si desidera che git-svn rimuova le directory vuote, è necessario utilizzare l'opzione della riga di comando '--rmdir' o l'opzione di configurazione' svn.rmdir'. – ninjalj

+0

Per quanto riguarda la tua domanda principale, dovresti probabilmente chiedere sulla mailing list git, possibilmente CC'ing autore di git-svn. – ninjalj

+0

Grazie @ninjalj - Proverò sulla mailing list. –

risposta

5

Sì, è sicuro.

dcommit fondamentalmente fa questo per ogni commit si stanno spingendo a SVN:

  1. Calcola la differenza tra il commit e il suo genitore. (Essenzialmente, creare una patch per il commit.)
  2. Invia questa differenza sul protocollo SVN come un changeset da impegnare. Una volta completato, il commit ora risiede sul server SVN.
  3. Recupera il nuovo commit e tutti gli altri nuovi commit che sono stati creati nel frattempo da altri utenti e li memorizzano localmente come commit Git appropriati. Il ramo git-svn sarà aggiornato per puntare a quello più recente.
  4. Rebase tutti i commit dopo quello appena elaborato sul riferimento del ramo git-svn in cui è stato eseguito il commit. (Dal momento che il commit elaborato deve ora essere pubblicato sul server, il commit locale appena elaborato viene eliminato, come per ogni altro rebase.)

Se si interrompe durante il passaggio 2 (che è cosa sembra) quindi il commit corrente verrà interrotto sul server svn. Dovresti essere in grado di smettere di nuovo senza preoccuparti.

Ma, se sei paranoico (e dovresti esserlo quando interagisci tra VCS come questo) potresti voler eseguire prima git svn rebase. In questo modo verranno annullati tutti i nuovi commit su SVN (incluso il commit che hai provato a premere, se è effettivamente riuscito sul lato server) e rebase il tuo ramo locale su di esso.

+0

Grazie a @cdhowie. Dopo che il timeout ha finalmente restituito il prompt, ho provato un rebase. Vorrei aver afferrato l'errore che ho avuto da esso. Non era disposto ad aggiornare il mio repository git locale dal server SVN. Se riesco a ricrearlo, pubblicherò l'errore. –

+0

È stato un errore diretto o solo un conflitto di patch? – cdhowie

+0

Era un conflitto, ma non riuscivo a capire come risolverlo. Ho finito per verificare il commit usando 'svn' e quindi ricreando il repository git locale da zero con un'altra chiamata' git svn clone'. –

Problemi correlati