Si elimino un archivo en Subversion, ¿cómo puedo ver su historial y contenido? Si intento hacer svn cat
o svn log
en un archivo inexistente, se queja de que el archivo no existe.
Además, si quisiera resucitar el archivo, ¿debería svn add
devolverlo?
(Pregunté específicamente sobre Subversion, pero también me gustaría saber cómo Bazaar, Mercurial y Git manejan este caso también).
svn
version-control
bazaar
Benjamin Peterson
fuente
fuente
Cuando desee ver archivos antiguos, realmente debe saber la diferencia entre:
y
La primera versión analiza la ruta que ahora está disponible como http: // server / svn / project / file y recupera ese archivo como estaba en la revisión 1234. (Por lo tanto, esta sintaxis no funciona después de eliminar un archivo).
La segunda sintaxis obtiene el archivo que estaba disponible como http: // server / svn / project / file en la revisión 1234. Por lo tanto, esta sintaxis FUNCIONA en archivos eliminados.
Incluso puede combinar estos métodos para recuperar un archivo que estaba disponible en la revisión 2345 como http: // server / svn / project / file pero con el contenido que tenía en 1234 con:
fuente
./local/file
cuando el./local
directorio no existía. Esto podría no ser un problema para las versiones más nuevas de SVN.^
notación es útil: se refiere a la raíz del repositorio, por lo que puede decirsvn cat ^/local/file@REV
(dependiendo de la distancia entre la raíz del repositorio y la URL).svn: E200009: Could not cat all targets because some targets are directories
Primero, encuentre el número de revisión donde se eliminó el archivo:
Luego busque en log.txt (no es un gurú SVN, así que no conozco una mejor manera) para obtener una línea con
y ver qué revisión fue esa. Luego, como en las otras respuestas, resucite el archivo utilizando la revisión anterior.
fuente
No es nada particularmente especial en git. Si conoce el nombre del archivo, puede encontrar el cambio que lo eliminó con log:
Luego puede usar esa confirmación para obtener el archivo tal como existía antes de la eliminación.
Ejemplo:
Tenga en cuenta que esto en realidad no vuelve a colocar el archivo en el control de revisión. Simplemente deja caer el archivo tal como existía en su estado final en la ubicación actual. Luego puede agregarlo o simplemente inspeccionarlo o lo que sea desde ese punto.
fuente
Una solución que usa solo la GUI:
Si conoce el nombre del archivo, pero no sabe su último número de revisión o incluso su ruta:
Esto mostrará solo aquellas revisiones donde el archivo fue agregado / modificado / eliminado. Este es tu historial del archivo.
Tenga en cuenta que si el archivo se eliminó eliminando una de sus carpetas principales, no tendrá una entrada 'eliminada' en el registro (y, por lo tanto, la solución de mjy no funcionará). En este caso, su entrada más reciente en el registro filtrado corresponderá a su contenido en la eliminación.
fuente
Te conseguirá el camino y la revisión. En git (también busca cambios de nombre):
fuente
Además de la respuesta de Dustin, si solo desea examinar el contenido y no verificarlo, en su ejemplo puede hacer:
the: separa una revisión y una ruta en esa revisión, solicitando efectivamente una ruta específica en una revisión específica.
fuente
Usa este comando:
Esto enumerará todas las revisiones que alguna vez eliminaron cualquier archivo que coincida con el patrón. Es decir, si usted está en busca de fichero README, entonces todos
/src/README
,/src/README.first
y/some/deeply/hidden/directory/READMENOT
será encontrado y listado.Si su nombre de archivo contiene barras diagonales (ruta), puntos u otros caracteres especiales de expresiones regulares, no olvide escapar de ellos para evitar desajustes o errores.
fuente
Si no conoce la ruta al archivo eliminado, resulta que puede buscarlo en el
svn log
comando que de otro modo sería demasiado pesado :El comando probablemente está afectando al servidor tanto como lo haría sin la opción de búsqueda, pero al menos el resto de los recursos involucrados (incluidos sus globos oculares) se vería aliviado, ya que eso le indicará en qué revisión se eliminó ese archivo. Luego, puede seguir los otros consejos (principalmente utilizando el mismo
svn log
comando, pero ya en una ruta definida).fuente
svn log --search _test2.php -v
... svn: opción no válida: --search ... :(El póster en realidad ha hecho 3 preguntas aquí:
Todas las respuestas que veo aquí son para las preguntas 2 y 3.
La respuesta a la pregunta 1 es:
Todavía necesita obtener el número de revisión de cuándo existió el archivo por última vez, lo que otros responden claramente aquí.
fuente
Ah, como estoy aprendiendo a usar Bazaar, es algo que probé. Sin éxito, parece que no puede iniciar sesión y anotar archivos eliminados actualmente ... :-(
Intentó:
pero curiosamente (y afortunadamente) puedo hacer:
y:
y como se sugiere en el error anterior:
(ajuste el parámetro
-B
(--before-context
) según sea necesario).fuente
Tendría que especificar una revisión.
fuente
Si desea ver el historial de un archivo antes de cambiarle el nombre, entonces, como se menciona en un comentario aquí , puede usar
fuente
Quería una respuesta, yo mismo. Pruebe lo siguiente para generar solo eliminaciones de
svn log
.Esto filtra la salida del registro a través de awk . awk almacena en búfer cada línea de revisión que encuentra, emitiéndola solo cuando se encuentra un registro de eliminación. Cada revisión solo se genera una vez, por lo que se agrupan varias eliminaciones en una revisión (como en el estándar
svn log
salida ).Puede especificar a
--limit
para reducir la cantidad de registros devueltos. También puede eliminar el--stop-on-copy
, según sea necesario.Sé que hay quejas sobre la eficiencia de analizar todo el registro. Creo que esta es una mejor solución que grep y su
-B
opción de "lanzar una red amplia" . No sé si es más eficiente, pero no puedo pensar en una alternativasvn log
. Es similar a la respuesta de @Alexander Amelkin, pero no necesita un nombre específico. También es mi primer guión awk , por lo que puede ser poco convencional.fuente
Suponga que su archivo fue nombrado como ~ / src / a / b / c / deleted.file
salida de muestra, la encontré en r90440
cópielo de nuevo a la versión anterior (90439 = 90440-1)
fuente
Puede encontrar la última revisión que proporciona el archivo mediante la búsqueda binaria. He creado un
/bin/bash
script simple para esto:fuente
Escribí un script php que copia el registro svn de todos mis repositorios en una base de datos mysql. Ahora puedo hacer búsquedas de texto completo en mis comentarios o nombres de archivos.
fuente