"Unadd" un archivo a svn antes de confirmar

200

Estaba en medio de un svn add / commit recursivo, y se incluyó una carpeta que no tenía las propiedades de ignorar adecuadas. Tengo alrededor de 100 archivos binarios cargados versionados ahora, pero aún no me he comprometido.

¿Cuál es la forma más fácil de 'deshacer' esto, sin eliminar todos los documentos?

Ganancia baja
fuente

Respuestas:

244

Utilizar svn revert --recursive folder_name


Advertencia

svn revertes intrínsecamente peligroso, ya que todo su propósito es descartar datos, es decir, sus cambios no confirmados. Una vez que haya revertido, Subversion no proporciona forma de recuperar esos cambios no confirmados.

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

Julien Lebosquain
fuente
12
Para ampliar esto, revertsin una revisión especificada, se deshacen los cambios que ocurrieron desde el último pago, incluidos los cambios de programación de agregar / eliminar, para los archivos especificados.
Ámbar
donde folder_name es la carpeta principal de la carpeta donde realizó el comando "Agregar"
MacGyver
28
Esta respuesta es peligrosamente incorrecta: desestabilizará sus cambios AL ELIMINAR SUS COPIAS LOCALES DE LOS ARCHIVOS. La respuesta de Brian Lacy a continuación es mucho mejor.
Henry Henrinson
66
Chicos, esto responde a la pregunta original: un archivo o carpeta que se agregó, luego se revirtió, solo vuelve a no estar versionado, sin ser eliminado. Eso es exactamente lo que hace la pregunta. Si lo usa en archivos modificados, por supuesto, los revierte: pero esa no era la cuestión. ¡Ese es incluso el caso de uso muy específico que se muestra en la página vinculada!
Julien Lebosquain
2
@JulienLebosquain Ok, supongo que tú y yo entendemos esta frase de manera diferente: sin eliminar todos los documentos . Desafortunadamente, svn reverttambién elimina los cambios recién agregados en la copia de trabajo, al restaurar la última HEADversión. Eliminé mi voto negativo, pero aún siento que la advertencia es importante.
jpaugh
145

svn rm --keep-local folder_name

Nota: En svn 1.5.4, svn rm elimina los archivos no versionados incluso cuando se especifica --keep-local. Consulte http://svn.haxx.se/users/archive-2009-11/0058.shtml para obtener más información.

Brian Lacy
fuente
9
Es bueno saberlo, ya que te permite deshacer simplemente "svn add" sin perder los cambios.
Ryan H.
1
¿Está seguro de que SVN 1.5.4 elimina archivos no versionados? El informe no era reproducible, y no hay otro correo electrónico al respecto.
Quentin Pradet
44
Esta es la mejor respuesta si quiere "agregar" los archivos, pero aún así mantenerlos. Después de este comando, los archivos seguirán allí con el? estado.
Robin Zimmermann el
32

Pruebe svn revert filenametodos los archivos que no necesita y que aún no ha confirmado O bien, haga svn revert -R folderla carpeta problemática y luego vuelva a hacer la operación con la configuración de ignorar correcta.

De la documentación:

 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
bobah
fuente
44
¡No! Revertir no es seguro, ya que pierde todos los cambios locales
jpaugh
@jpaugh - Esto es exactamente lo que escribí en la respuesta, ¿no?
bobah
1
Lo que solicitó el OP (y lo que esperaba) fue un comando para deshacer el complemento sin perder los cambios locales. svn revert. Ninguna de las respuestas aquí menciona el hecho de que los cambios locales se perderán por la reversión.
jpaugh
3

Proceso completo (paquete Unix svn):

Los archivos de verificación no están en SVN:

> svn st -u folder 
? folder

Agregar todo (incluidos los archivos ignorados):

> 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

Eliminar la bandera "Agregar" a todos los archivos * Ignorar *:

> cd folder

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


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

Editar svn ignorar en la carpeta

svn propedit svn:ignore .

Agregue dos líneas individuales con solo lo siguiente:

folderToIgnore
fileToIgnore2.txt

Verifique qué archivos se cargarán y confirmarán:

> cd ..

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


> svn ci -m "Commit message here"
mud1e
fuente
1
Gracias, exactamente lo que necesitaba. Parece que revirtió solo la operación 'agregar', sin tocar el contenido del archivo en sí. Tenía miedo de perder los cambios locales como se comentó en las respuestas anteriores, pero parece que no se dañaron los archivos.
Peter M. - representa a Mónica
1

Para archivos svn revert filename

Para carpetas - svn revert -R folder

Arvind Singh
fuente
44
¡No! Revertir no es seguro, ya que pierde todos los cambios locales
jpaugh