"Annulla" un file da svn prima del commit


200

Ero nel mezzo di fare un svn ricorsivo add / commit, ed era inclusa una cartella che non aveva le proprietà ignorate appropriate. Ho circa 100 file binari caricati con versione ora, ma non ho ancora eseguito il commit.

Qual è il modo più semplice per "annullare" questo, senza eliminare tutti i documenti?

Risposte:


244

Uso svn revert --recursive folder_name


avvertimento

svn revertè intrinsecamente pericoloso, poiché il suo scopo è quello di eliminare i dati, vale a dire le modifiche senza impegno. Dopo aver ripristinato, Subversion non fornisce alcun modo per recuperare le modifiche non confermate.

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.revert.html


12
Espandersi su questo - revertsenza una revisione specificata si annulla qualsiasi modifica avvenuta dall'ultimo checkout, incluse le modifiche alla pianificazione di aggiunta / eliminazione, per i file specificati.
Ambra

dove nome_cartella è la cartella principale della cartella in cui è stato eseguito il comando "Aggiungi"
MacGyver

28
Questa risposta è pericolosamente errata: metterà in scena le modifiche RIMUOVENDO LE COPIE LOCALI DEI FILE. La risposta di Brian Lacy di seguito è molto meglio.
Henry Henrinson,

6
Ragazzi, questo risponde alla domanda originale: un file o una cartella che è stata aggiunta, quindi ripristinata, ritorna ad essere non versione, senza essere eliminata. Questo è esattamente ciò che pone la domanda. Se lo usi su file modificati, ovviamente li ripristina: ma non era questa la domanda. Questo è persino il caso d'uso molto specifico mostrato nella pagina collegata!
Julien Lebosquain,

2
@JulienLebosquain Ok, immagino tu e capisco questa frase in modo diverso: senza cancellare tutti i documenti . Sfortunatamente, svn revertelimina anche le modifiche appena aggiunte nella copia di lavoro, ripristinando la versione più HEADrecente. Ho rimosso il mio voto negativo, ma sento ancora che l'avvertimento è importante.
jpaugh

145

svn rm --keep-local folder_name

Nota: in svn 1.5.4 svn rm elimina i file non controllati anche quando è specificato --keep-local. Vedere http://svn.haxx.se/users/archive-2009-11/0058.shtml per ulteriori informazioni.


9
È utile sapere che consente di annullare semplicemente "svn add" senza perdere le modifiche!
Ryan H.

1
Sei sicuro che SVN 1.5.4 elimina i file non controllati? Il rapporto non era riproducibile e non ci sono altre email a riguardo.
Quentin Pradet,

4
Questa è la risposta migliore se si desidera "annullare l'aggiunta" dei file, ma conservarli comunque. Dopo questo comando, i file saranno ancora lì con il? stato.
Robin Zimmermann,

32

Prova svn revert filenameper ogni file che non ti serve e che non hai ancora eseguito il commit. Oppure in alternativasvn revert -R folder per la cartella problematica, quindi ripetere l'operazione ignorando la configurazione corretta.

Dalla documentazione:

 you can undo any scheduling operations:

$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c

$ svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops

4
No! Revert è pericoloso, in quanto perde tutte le modifiche locali
jpaugh

@jpaugh - Questo è esattamente quello che ho scritto nella risposta, no?
Bobah,

1
Ciò che l'OP ha richiesto (e quello che mi aspettavo) era un comando per annullare l'aggiunta senza perdere le modifiche locali. svn revert. Nessuna delle risposte qui menziona il fatto che i cambiamenti locali andranno persi dal ripristino.
jpaugh

3

Processo completo (pacchetto Unix svn):

Verifica che i file non siano in SVN:

> svn st -u folder 
? folder

Aggiungi tutto (compresi i file ignorati):

> svn add folder
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt
A   folder/folderToIgnore
A   folder/folderToIgnore/fileToIgnore1.txt
A   fileToIgnore2.txt

Rimuovi "Aggiungi" Contrassegna su tutti i file * Ignora *:

> cd folder

> svn revert --recursive folderToIgnore
Reverted 'folderToIgnore'
Reverted 'folderToIgnore/fileToIgnore1.txt'


> svn revert fileToIgnore2.txt
Reverted 'fileToIgnore2.txt'

Modifica svn ignora sulla cartella

svn propedit svn:ignore .

Aggiungi due righe singole con solo le seguenti:

folderToIgnore
fileToIgnore2.txt

Verifica quali file verranno caricati e esegui il commit:

> cd ..

> svn st -u
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt


> svn ci -m "Commit message here"

1
Grazie, esattamente quello di cui avevo bisogno. Sembra che abbia ripristinato solo l'operazione "aggiungi", senza toccare il contenuto del file stesso. Avevo paura di perdere le modifiche locali come commentato sulle risposte precedenti, ma sembra che nessun file sia stato danneggiato.
Peter M. - sta per Monica

1

Per i file - svn revert filename

Per cartelle - svn revert -R folder


4
No! Revert è pericoloso, in quanto perde tutte le modifiche locali
jpaugh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.