Sé que puedo svn diff -r a:b repo
ver los cambios entre las dos revisiones especificadas. Lo que me gustaría es una diferencia para cada revisión que cambió el archivo. ¿Está disponible ese comando?
Sé que puedo svn diff -r a:b repo
ver los cambios entre las dos revisiones especificadas. Lo que me gustaría es una diferencia para cada revisión que cambió el archivo. ¿Está disponible ese comando?
Respuestas:
No hay un comando incorporado para él, por lo que generalmente hago 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 $url@HEAD
svn cat -r$r $url@HEAD
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
Luego, puede llamarlo con:
history_of_file $1
svn: '.' is not a working copy svn: Syntax error in revision argument '@HEAD' svn: Syntax error in revision argument '@HEAD'
svn log --diff [path_to_file]
funciona exactamente así! stackoverflow.com/a/24938573/3185510
Ligeramente diferente de lo que describiste, pero creo que esto podría ser lo que realmente necesitas:
svn blame filename
Imprimirá el archivo con cada línea prefijada por la hora y el autor de la confirmación que la cambió por última vez.
Si desea ver el historial completo de un archivo con cambios de código:
svn log --diff [path_to_file] > log.txt
--diff
ya que tiene pruebas para la opción, mientras que 1.7.3 no tiene ninguna subversion/tests/cmdline/log_tests.py
.
--limit <number>
opción. Como así:svn log --diff --limit 5 [path_to_file]
Puede usar git-svn
para importar el repositorio en un repositorio Git, luego usar git log -p filename
. Esto muestra cada entrada de registro para el archivo seguido de la diferencia correspondiente.
git log X..Y -o filename
Empezar con
svn log -q file | grep '^r' | cut -f1 -d' '
Eso le dará una lista de revisiones en las que cambió el archivo, que luego puede usar para realizar scripts de llamadas repetidas svn diff
.
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
un pequeño y agradable
El comando "culpar" curiosamente llamado hace esto. Si usa Tortoise, aparece un cuadro de diálogo "desde la revisión", luego una lista de archivos con un indicador línea por línea del número de revisión y el autor al lado.
Si hace clic con el botón derecho en la información de revisión, puede abrir un cuadro de diálogo "Mostrar registro" que proporciona información completa sobre el registro, junto con otros archivos que formaron parte del registro.
Hasta donde sé, no hay un comando svn integrado para lograr esto. Debería escribir un script para ejecutar varios comandos para construir todos los diffs. Un enfoque más simple sería usar un cliente de interfaz gráfica de usuario 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.
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
Agregué -r al género. Eliminé las especificaciones. manejo para 'primer registro'. Es un 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 $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
history_of_file $1
He visto un montón de respuestas parciales mientras investigaba este tema. Esto es lo que funcionó para mí y espero que ayude a otros. Este comando mostrará la salida en la línea de comando, mostrando el número de revisión, el autor, la marca de tiempo de revisión y los cambios realizados:
svn blame -v <filename>
Para facilitar su búsqueda, puede escribir el resultado en un archivo y grep para lo que está buscando.