2009-03-20 34 views
5

Ho apportato alcune modifiche e le ho confermate (alla versione 2) e ho scoperto che hanno introdotto nuovi bug nel mio programma alcuni minuti più tardi. Così sono passato ad alcuni dei file in una versione precedente per riportare alcuni dei file alla versione 1 sulla mia piattaforma locale. Da allora ho apportato molte modifiche che non voglio perdere e ho utilizzato commit (versione 3) per ottenere le mie modifiche locali sul server.Come forzare la versione locale come più recente su SVN

La versione che ho localmente è esattamente ciò che voglio essere nel repository come revisione principale, anche se alcuni dei file sono ancora ufficialmente in "versione 1". Presumo che dovrei usare l'unione SVN in qualche modo, ma non sono proprio sicuro di come farlo. Qualche consiglio?

modifica: quando utilizzo diff, mostra le modifiche dalla versione locale alla versione rappresentante. Potrei fare l'aggiornamento, ma poi avrei di nuovo una versione non funzionante a livello locale. Quindi quello che voglio è una specie di commit forzato, che dice semplicemente "questa è la versione più recente, periodo".

edit2: Quando si esegue "commit", SVN segnala che non vi sono modifiche. Grazie a Neil Butterworth per la domanda.

edit3: Quello che ho finalmente fatto, FYI: avrei dovuto usare il suggerimento di Tim, ma ero abbastanza stupido da fare un aggiornamento senza pensare veramente a quello che stavo facendo. Naturalmente, tutto è stato davvero incasinato oltre ogni possibilità di riparazione. Quindi, quello che ho fatto alla fine è stato esportare il progetto in una nuova directory. Ovviamente non è il modo in cui dovresti farlo, ma non volevo più scherzare con questa roba. Alla fine ho dovuto tornare a fare progressi reali sul progetto attuale ;-) So che non posso fare cose del genere quando lavoro in una squadra più grande, ma non lo sono :)

+0

Cosa succede quando si commettono le modifiche? –

+0

Dice: nessuna modifica. buona domanda – panschk

risposta

9

Modo forza bruta:

  1. Creare una copia dei file locali.
  2. Elimina tutti i file .svn in tutte le directory
  3. Controlla la versione HEAD.
  4. Copia i file locali nella TESTA estratta.
  5. Controllare i file locali nel repository.

Se eseguito correttamente, il client SVN deve interpretare i file modificati come aggiornamenti nel repository. Ciò tuttavia sovrascriverà qualsiasi modifica apportata da altre persone che potresti voler mantenere. Se si desidera mantenere tali modifiche, eseguire prima un diff su tutti i file e incorporare tutte le modifiche recenti, prima di eseguire il commit finale.

Reverse unire di nuovo a revisione originale:

  • Per ogni file modificato,
    1. Confronta diff, cambiamenti di nota che si desidera conservare e modificare la copia locale di conseguenza.
    2. Crea una copia dei tuoi file locali.
    3. Reverse merge HEAD di nuovo alla versione originale desiderata.
    4. Incollare la copia dei file locali sulla copia locale unita. (Elimina .svn prima)
    5. Commit

Questo è probabilmente più manuale meno che non solo ripristinare tutto torna senza controllare per eventuali modifiche.

Subversion, AFAIK, non ha ancora previsto un comando di cancellazione, quindi tutte le modifiche avvengono sempre sulla copia locale dell'HEAD.

Indietro indietro è solo un'unione inversa e tutte le fusioni si verificano sempre sulla copia locale. In un sistema ideale, l'unione verrà tracciata, ma Subversion non tiene traccia delle informazioni di unione, quindi potresti anche fare il metodo 1, e solo fare un commento nel registro di commit.

Alcuni URL di guardare in alto:

+0

Questo sarebbe il piano B, se non altro funziona. Ma sarebbe piuttosto un po 'di lavoro manuale. Preferirei farlo in un modo più intelligente ;-) – panschk

+0

Sì, un po 'fastidioso da esibire, ma funziona sempre. –

+0

Non è proprio quel manuale. L'ho fatto molte volte prima. Supponendo windows, seleziona tutto, copia, incolla da qualche altra parte. Cerca tutti .svn, elimina. Aggiornamento alla testa. Copia la vecchia versione, incolla indietro. Commettere. – Tim

3

Ci sono due possibilità qui:

  • È efficace interruttore a una versione precedente del repository, quindi hai lavorato sulla versione 1;
  • Oppure avete estratto le vecchie versioni dei file rispetto alla versione 2, li avete modificati e impegnati come una nuova versione.

In ogni caso, se le modifiche sono state eseguite correttamente, è ciò che dovrebbe essere sul server.

Se non siete sicuri, però, mi consiglia:

  • Tenere un backup dei file correnti;
  • Controlla una nuova copia del repository;
  • Se vedi che è uguale alla tua copia, allora nient'altro da fare.
  • In caso contrario, sovrascrivere tutti i file nella nuova copia di backup con il tuo (tranne che per le cartelle nascoste .svn!)
+0

Questo in realtà ha più senso per me della risposta accettata. L'ho fatto alcune volte anch'io. – WakeUpScreaming

2

Quindi sono passato a alcuni dei file per una versione precedente a ottenere alcuni dei i file tornano alla versione 1 sulla mia piattaforma locale .

Invece di questo è necessario aver annullato le modifiche dalla revisione particolare. Dovresti essere ancora in grado di fare l'aggiornamento e ripristinare le modifiche da quella revisione dopo.

Problemi correlati