Domanda

Che cosa, qualcuno nella mia squadra ha fatto un "errore" per eliminare più file nella revisione corrente del repository squadra. E 'possibile aggiornare la versione locale corrente alla revisione testa? Quando clicco su impegno, subclipse non riconosce i file mancanti per caricarle.

Grazie in anticipo,
rAyt

È stato utile?

Soluzione

Oh, per l'amor di Pete! Le risposte finora sono stati - nel migliore dei casi -. Fuorviante

Dalla tua domanda, sembra che si stavano cercando qualcosa di simile:

svn update -r8
# ok, I can see the deleted file now
svn commit -m "I want r8 to be newest"

Solo che non funzionerà. Non ci sono modifiche per commettere. È possibile aggiornare a revisioni più vecchie, ma non è possibile apportare modifiche lì. Non si può cambiare il passato. È possibile impegnarsi solo una nuova revisione, annullando il danno.

Ok, supponiamo che il repository è in svn: // pronti contro termine. Qui, un esempio semplificato in cui il tronco cartella contiene due file, "a" e "b". Chiamiamo questa revisione 8 (R8).

trunk    # working copy of svn://repo/trunk
    a
    b

J.R. Hacker, scivola su e cancella accidentalmente B:

svn rm b
svn commit -m "oops"

Chiamiamo il conseguente impegno R9.

Così, la prossima volta che si aggiorna dal repository,

svn update

trunk
    a

b svanisce! Panico? No. Questo è un sistema di controllo di versione. Tutto ciò che è stato registrato può essere ripristinato. Qui ci sono due possibilità:

Proprio copia il file da una revisione più vecchia, vale a dire l'ultima revisione in cui esisteva ancora:. 8

svn cp svn://repo/trunk/b@8 .
svn commit -m "restored b from revision 8"

La soluzione più generale è quella di utilizzare un merge . è possibile utilizzare questa tecnica per annullare più di un semplice eliminazione randagio.

svn merge -r9:8 . .
svn commit -m "reverted the changes made in revision 8"

Il modo di leggere questa unione è:

In primo luogo capire che cosa le modifiche devono essere fatte per ottenere da R9 (indietro) per r8 della cartella di repository: ( "" il primo) (svn // repo / tronco) associato alla directory corrente. Ora, eseguire tali cambiamenti sulla copia di lavoro nella directory corrente (il secondo "").

C'è una sintassi più conveniente se si sta solo tornando una singola modifica:

svn merge -c-8  . . #note the minus sign before the 8

Se non si utilizza svn da linea di comando, curiosare intorno al vostro strumento un po ', siete sicuri di trovare qualcosa. TortoiseSVN, ad esempio, ha la portata di mano "annullare le modifiche da questa revisione" quando si apre un registro da una copia di lavoro.

Altri suggerimenti

Prendere una copia dei file cancellati-in-SVN dalla revisione da qualche parte (ad esempio, una cartella temporanea sul desktop), quindi aggiornare (che rimuoverà i file originali, come per azione di eliminazione commesso del vostro collega), quindi spostare le copie indietro e commetterli di nuovo in SVN.

Vorrei fare quanto segue:

Trova il numero di revisione prima della cancellazione ... fare un -r1 svnadmin dump:. [Goodrevisionnumber qui]> file.dump

Quindi, creare un nuovo repository, "svnadmin creare [nome del repository]" e quindi caricare il dump nel nuovo repository. "Carico svnadmin [newrepositoryname]

Poi, controlla questa revisione, e copiare i file dal vecchio cassa in quello nuovo e si impegnano.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top