2009-01-21 5 views
10

Se me ha pedido que revise los cambios realizados en el número de revisión SVN 123, 178, 199, 245 y 288, que son todas las confirmaciones relacionadas con una característica específica. ¿Cuál es la forma razonable de abordar esto? Supongo que realmente quiero ver el diff recopilado de alguna manera, pero estoy abierto a sugerencias. Estamos en la revisión 400 en este momento.¿Al ver una diferencia combinada de muchos commits en subversión?

Editar: Me gusta saber cómo hacer cosas desde la línea de comandos en subversión, pero cualquier solución que funcione en eclipse o idea inteligente (o cualquier aplicación por separado) también es bienvenida. También estoy deliberadamente abierto en lo que puedo esperar de forma realista para automatizar/obtener soporte de herramientas, ya que realmente no veo cómo hacerlo de una manera inteligente.

Respuesta

5

Genera cinco confirmaciones distintas y las combina con combinediff desde patchutils.

+0

sería esto surpress cambios en la misma línea de código se repite? – krosenvold

+0

¡increíble! Nunca oí hablar de combinationiff – orip

+0

> combinediff crea una diferencia unificada que expresa la suma de dos diffs. así que creo que sí, suprimirá los cambios relacionados a la misma línea de código. – squadette

0

bendin 's respuesta a this pregunta tenía una función para imprimir el diff recopilados para todas las revisiones de un archivo. Podría modificarse fácilmente para imprimir la diferencia recopilada de las revisiones en las que estaba interesado.

+0

Por lo que puedo ver, no hay nada ni remotamente relacionado en esa pregunta, ¿o me está perdiendo algo que estás viendo? – krosenvold

+0

edité mi respuesta para indicar por qué creía que la otra pregunta era útil –

0

No especificó si quería basar el diferencial en HEAD, o en cada número REV sucesivo (que no estoy seguro de por qué querría realmente para hacer esto? (no se comprometa si no lo quiso decir)).


#!/bin/bash 
for revision in 123 178 199 245 288; 
do 
      svn diff http://path/to/svn/[email protected] http://path/to/svn/[email protected]$revision > $revision.diff 
done 

favor, chicos ventanas ventilador, me Downvote porque mi respuesta implica la cáscara del golpe y no el shell de Windows (a pesar de la entrada original sin mencionar un sistema operativo)

+0

El "problema" con esto es que tengo que ver el historial completo de cambios/reprocesos que se llevaron a cabo. Imagina que los cinco commits cambiaron la misma línea de código; cuando leo el código, siempre leo líneas completas, de modo que se pueden suprimir todos los cambios anteriores. – krosenvold

+0

Estoy confundido por este todavía. ¿Por qué le importaría la solución intermedia si un compromiso posterior o más reciente la resuelve (con suerte y debería ser, de una mejor manera)? –

+0

Y como sugieres, no me importan las cosas que se han mejorado en un compromiso posterior. Si difiero rev 123 vs HEAD veré todo tipo de cosas que se han cambiado en 178 vs HEAD. Pero también habrá algunas cosas en 123 vs HEAD que no cambian. Esto desorienta mi mente. – krosenvold

1

me hizo una pregunta similar sobre extracting relevant changes for code review pero no me paré obtener una respuesta satisfactoria. Lo más cerca que he llegado a una solución es hacer lo que mencioné, crear una rama temporal y seleccionar cuidadosamente los compromisos interesantes en esa rama temporal. Si se combinan limpiamente, entonces todo el delta se puede revisar de una vez. En el caso de que no se combinen limpiamente y dependan de otro cambio no relacionado, tal vez eso signifique que todo el lote se deba revisar de una vez.

+0

Es una solución decente, si trabaja mucho;) Lo interesante es que, para fines de revisión, generalmente está satisfecho con la información sobre qué partes de los archivos han cambiado, una diferencia real no es lo que estoy buscando. . Siempre volveré a leer el código completo en las áreas modificadas. – krosenvold

4

Después de escarbar en la idea de IntelliJ me encontré con un buen solución a este:

Seleccione Control de versiones | Mostrar vista de cambios

En el lado izquierdo, selecciona el repositorio y haz clic en todas las revisiones que quieras revisar.

En el panel de la derecha, obtendrá una lista de todos los archivos que se ven afectados por las revisiones que ha seleccionado. Cuando eliges "diff", verás los cambios internos en los conjuntos de cambios seleccionados. re-trabajos internos que se producen dentro de las confirmaciones no se muestran (como es de esperar)

+1

si yo voto por ti, lo haría. ¡salgan de mi jardín malditos niños con su maldita GUI! –

+0

LOL;) +1 a la secuencia de comandos bash para este comentario. – krosenvold

+0

lol +1 para el buen deporte –

1

A pesar de que esta pregunta es mucho más con, de hecho me escribió un guión hoy que es a lo largo de estas líneas:


#!/bin/bash 

[email protected] 
LAST_REVISION="NULL" 
MASTER="master"        # path to WC 

for THIS_REVISION in ${REVISIONS[@]}; 
do 
    if [ "$LAST_REVISION" != "NULL" ]; 
    then 
     svn diff $MASTER -r ${LAST_REVISION}:${THIS_REVISION} --summarize | while read f; 
     do 
      echo ${f#* } | sed "s/[a-zA-Z0-9:\/.]*$MASTER\///" >> "$LAST_REVISION-to-$THIS_REVISION.log" 
     done 
    fi 

    LAST_REVISION=$THIS_REVISION 
done 

y se le puede llamar como "my_diff_script.sh Rev1 rev2 Rev3 rev4"

la salida sería:

 
rev1-to-rev2.log 
rev2-to-rev3.log 
rev3-to-rev4.log 
+0

Good sport;) +1. Y sí, algunos de nosotros seguimos nuestros hilos;) – krosenvold

Cuestiones relacionadas