Sé que puedo svn diff -r a:b repo
para ver los cambios entre las dos revisiones especificadas. Lo que me gustaría es una diferencia para cada revisión que cambió el archivo. ¿Hay tal comando disponible?¿Cómo puedo ver todos los cambios históricos en un archivo en SVN
Respuesta
no hay comando integrado por él, así que por lo general sólo hacer algo como esto:
#!/bin/bash
# history_of_file
#
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -n | {
# first revision as full text
echo
read r
svn log -r$r [email protected]
svn cat -r$r [email protected]
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r [email protected]
svn diff -c$r [email protected]
echo
done
}
}
A continuación, se le puede llamar con:
history_of_file $1
Nunca antes había visto ese truco de "tubería en el bloque arriostrado". Ordenado. –
[Versión de archivo por lotes] (http://stackoverflow.com/questions/5622367/generate-history-of-changes-on-a-file-in-svn/5721533#5721533) de este script, fwiw. – ladenedge
Agregué esto a mi archivo .bashrc. Cuando inicio, obtengo 'svn: '.' no es una copia de trabajo svn: Error de sintaxis en el argumento de revisión '@HEAD' svn: Error de sintaxis en el argumento de revisión '@ HEAD'' – Francisc0
Puede usar git-svn
para importar el repositorio en un repositorio de Git, luego use git log -p filename
. Esto muestra cada entrada de registro para el archivo seguido de la diferencia correspondiente.
Instalar git, crear un repositorio git, usar un comando git? La pregunta fue etiquetada y se le preguntó acerca de Subversion. –
Uso git como cliente de Subversion con git-svn. Así es como haría la operación log + diff contra un repositorio de Subversion. Git tiene algunas herramientas realmente excelentes para ver el repositorio, no es una idea tan descabellada. –
Por encima de alguien se le felicita (correctamente) por escribir un buen script: para proporcionar funciones que no están presentes en SVN. Al ver que el git es local a menos que presionas, puedes llamar a este herramental, no es necesario que te enojes por nada. –
Por lo que sé, no existe un comando svn incorporado para lograr esto. Debería escribir un script para ejecutar varios comandos para compilar todos los diffs. Un enfoque más simple sería usar un cliente svn GUI si esa es una opción. Muchos de ellos, como el complemento subversivo para Eclipse, enumerarán el historial de un archivo y le permitirán ver la diferencia de cada revisión.
de inicio con
svn log -q file | grep '^r' | cut -f1 -d' '
que le dará una lista de revisiones en las que cambia el archivo, que luego se puede utilizar para llamadas de guión repetido a svn diff
.
o ... ¡sigue adelante! '' svn log -q some_file.xxx | grep^r | awk '{print $ 1}' | sed-e 's/^ r //' | xargs -i svn diff -rHEAD: {} some_file.xxx> ~/file_history.txt'' nice little one-liner (awk hace lo mismo que cortar) – Kasapo
ligeramente diferente de lo que usted describió , pero creo que esto podría ser lo que realmente necesita:
svn blame filename
Imprimirá el archivo con cada línea pre fijado por el tiempo y autor del compromiso que lo cambió por última vez.
Whoa esto es increíble! He estado usando SVN durante años y nunca supe esto: O –
Puede que necesite la opción verbosa/-v para ver la marca de tiempo (lo hago con mi versión predeterminada de svn 1.7.9). –
mi profesor escribió el plugin de culpa inicial a svn. Tenía que buscar esto todavía. Él se está autocompletando completamente en esta tarea. : P –
El comando extrañamente llamado "culpa" hace esto. Si usa Tortoise, le ofrece un cuadro de diálogo "a partir de la revisión", luego un listado de archivo con un indicador de línea por línea del número de revisión y el autor al lado.
Si hace clic derecho en la información de revisión, puede abrir un cuadro de diálogo "Mostrar registro" que proporciona información de registro completa, junto con otros archivos que formaban parte del registro.
Eso es muy útil, pero no lo que el OP estaba buscando, que es un historial completo del archivo, no solo las contribuciones históricas del archivo actual. Ese historial completo es útil cuando se mira hacia atrás para descubrir por qué se eliminó o cambió cierto código, y cuándo. –
Por el contrario, el nombre es bastante correcto. Te dice a quién culpar por un trozo de código en particular (chungo/error/incomprensible). –
¿No sería bueno si el nombre obvio para el comando fuera "crédito" en lugar de "culpa"? :) – Nick
Gracias, Bendin. Me gusta mucho tu solución.
Lo cambié para que funcione en orden inverso, mostrando primero los cambios más recientes. Lo cual es importante con el código de larga data, mantenido durante varios años. Por lo general, lo canalizo en más.
svnhistory elements.py |more
He añadido -r al género. Eliminé las especificaciones manejo para 'primer registro'. Es error en la última entrada, ya que no hay nada con lo que diferir. Aunque estoy viviendo con eso porque nunca llego tan lejos.
#!/bin/bash
# history_of_file
#
# Bendin on Stack Overflow: http://stackoverflow.com/questions/282802
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
#
# Dlink
# Made to work in reverse order
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -nr | {
while read r
do
echo
svn log -r$r [email protected]
svn diff -c$r [email protected]
echo
done
}
}
history_of_file $1
Si quieres ver la historia entera de un archivo con los cambios de código:
svn log --diff [path_to_file] > log.txt
No sé cuándo se ha agregado la opción --diff pero funciona con svn 1.8.10, por lo que no es necesario un script bash –
Creo que svn 1.7.4 introdujo la opción '--diff' desde tiene pruebas para la opción, mientras que 1.7.3 no tiene ninguna - 'subversion/tests/cmdline/log_tests.py'. – valid
Solo una pequeña nota: dependiendo de la duración del historial, esto puede llevar bastante tiempo antes de que el archivo log.txt se represente por completo (aunque se podrá leer de inmediato). –
- 1. Ver los últimos cambios en svn
- 2. Svn revertir todos los cambios en las propiedades
- 3. Generar el historial de cambios en un archivo en svn
- 4. ¿Cómo puedo ver todos los errores jslint en IntelliJ?
- 5. ¿Cómo puedo ver los cambios pendientes de Entity Framework?
- 6. no puedo confirmar los cambios después de fusionarse en SVN
- 7. ¿Cómo puedo ver un registro unificado de cambios en un conjunto de archivos de forma forzosa?
- 8. Ver todos los archivos modificados en TFS
- 9. Ver todos los `git diffs` con vimdiff
- 10. ¿Cómo puedo extraer todos los archivos modificados de un conjunto de cambios en Mercurial?
- 11. SVN: Revertir cambios de una revisión aleatoria, pero preservar los cambios de todos los siguientes
- 12. SVN: obtenga todos los mensajes de confirmación para un archivo.
- 13. TFS: ¿Cómo ver todos los archivos en muchos conjuntos de cambios?
- 14. Poner todos los archivos modificados en una lista de cambios en SVN
- 15. git: cómo ver los cambios, la próxima inserción enviará
- 16. ¿Cómo ver los cambios recientes del proyecto de CVS en Eclipse?
- 17. ¿Cómo acepto todos los cambios desde un control remoto?
- 18. ¿Cómo confirmar los cambios a SVN External?
- 19. Cómo leer los cambios de SVN repo
- 20. cómo puedo ver los datos en el archivo mdf
- 21. ¿Cómo puedo resolver todos los conflictos SVN automáticamente? (Windows CLI)
- 22. ¿Cómo actualizar un archivo en SVN?
- 23. ¿Cómo puedo ver todos los datos que solr indexa?
- 24. ¿Cómo ver los cambios 'git svn dcommit' antes de realizar la transacción?
- 25. ¿Cómo puedo ver un archivo comprimido contenido
- 26. ¿Cómo elimino todos los rastros de un archivo de Subversion?
- 27. git: ¿Cómo sobrescribo todos los cambios locales en la fusión?
- 28. ¿Cómo puedo controlar un directorio de Windows para ver los cambios?
- 29. ¿Cómo puedo ignorar los cambios de eol y todo el espacio en blanco en svn?
- 30. ¿Cómo puedo rechazar todos los cambios en un Linq al DataContext de SQL?
Está escondido en el extraño nombre de "culpar" de comandos. – goosemanjack
Pensé que @goosemanjack estaba bromeando, hasta que lo intenté. –