subir - tortoise svn server
¿Qué es una forma simple de recuperar un archivo en subversión? (6)
Para eliminar un archivo pero guárdelo en la copia de trabajo, use
svn rm foo.txt --keep-local
Para recuperar un archivo después de haber cometido la eliminación, puede usar el comando de fusión o el comando de copia; ambos conservarán el historial de archivos. Dado que la forma de fusión ya se describe en otra parte, aquí está la forma de copiar:
svn rm foo.txt
svn ci foo.txt -m "removed file"
(now at r5 as an example)
svn cp url/to/removed/foo.txt -r4 foo.txt
svn ci foo.txt -m "got file back"
Estas instrucciones son un poco intimidantes y confusas: http://svnbook.red-bean.com/en/1.0/ch04s04.html#svn-ch-4-sect-4.3 . Y tampoco parecen mencionar que es mucho más simple si aún no se ha registrado después de hacer el " svn rm
" [1].
Así que pensé que este sería un buen lugar para registrar una respuesta más simple para aquellos que buscan en Google para esto.
[1] Para un svn novato, podría parecer que " svn rm
" destruye inmediatamente el archivo. Recuerdo que estaba haciendo svn rm
pensando que eso simplemente lo eliminaría del control de código fuente y se volvería loco cuando el archivo realmente desapareciera. Entonces, una pregunta secundaria es, ¿cuál es la forma correcta de eliminar un archivo del control de versión sin eliminar realmente su copia local?
Para los usuarios de TortoiseSVN, esto se logra fácilmente a través del navegador Repo. Dentro del navegador Repo, cambie a la revisión antes de que se haya eliminado el archivo (puede cambiar la versión usando el botón "Revisión:" en la parte superior derecha):
Debería poder ver el archivo eliminado en su ubicación original en el navegador Repo. Haga clic derecho sobre él y elija "Copiar a copia de trabajo ...":
El archivo se restaurará en su copia de trabajo listo para confirmar (como si svn agregado) y con su historial de registro intactos.
Para revertir un archivo eliminado en SVN. Encuentre el número de revisión justo antes de eliminar (digamos 341). A continuación, revertir ese archivo solo a ese número de revisión.
svn up -r341 [path_to_deletedFile]
Si acabas de hacer
svn rm foo.txt
entonces puedes deshacer eso con simplemente
svn revert foo.txt
Si ya ingresó después de hacer el " svn rm
", puede mirar el registro ( svn log
), encontrar la última revisión donde el archivo existió, y tomarlo de esa versión.
Una forma de hacerlo es fusionar en la revisión anterior que tiene el archivo. Suponiendo que la revisión actual es 123 y la última versión con ese archivo es 120, haga esto:
svn merge -r123:120
Tal vez primero haga una carrera en seco para asegurarse de que no hará nada que no desee:
svn --dry-run merge -r123:120
Para la sub-pregunta, cómo eliminar un archivo de svn sin eliminar la copia local:
svn rm foo.txt --keep-local
O, por supuesto, puede copiar a un archivo temporal antes de svn rm''ing y luego copiar de nuevo:
cp foo.txt foo.txt-tmp
svn rm foo.txt
(svn ci -m "just removed foo.txt from the repository")
cp foo.txt-tmp foo.txt
Utilicé el elemento del menú de copia de la revisión anterior usando tortuga, funcionó para mí y guardé el historial.
por alguna razón, el -r
arg no funcionaba para mí (svn versión 1.6.9). Intenté antes y después del src
, pero seguí recibiendo un mensaje de que el archivo no se encontró en la revisión actual (duh). Lo mismo con --revision. Sin embargo, se usó la sintaxis de estilo @:
svn cp url/to/removed/foo.txt@4 foo.txt