tag - tortoise svn server
Subversión: revise solo aquellos archivos afectados durante un compromiso específico (13)
En Subversion, ¿es posible revisar solo los archivos afectados durante un compromiso específico, siempre que conozca el número de revisión específico?
Aquí está una versión de script bash simple. Utilicé un "patrón de búsqueda" para eliminar líneas innecesarias. La revisión, la dirección del repositorio y la ruta de destino se dan como argumentos, pero podrían estar codificados.
#!/bin/bash
REVISION=${1}
REPOSITORY="${2}"
DEST_PATH="${3}"
SEARCH_PATTERN="trunk"
FILES=$(svn log -q -v $REPOSITORY -r $REVISION | grep $SEARCH_PATTERN)
mkdir -p $DEST_PATH
for FILE in $FILES ; do
if [[ $FILE == *"$SEARCH_PATTERN"* ]]
then
FOLDER=$(dirname $FILE)
mkdir -p $DEST_PATH/$FOLDER
svn export -r $REVISION $REPOSITORY/$FILE $DEST_PATH/$FOLDER
fi
done
#EOF
Aquí hay una forma de hacerlo.
svn co --depth empty svn: // myrepository / mytrunk
cd mytrunk
svn diff -c [REVNUM] svn: // myrepository / mytrunk | grep "Index:" | awk ''{print $ 2}'' | xargs -n 1 actualización svn - padres
La salida del awk one-liner es una lista de archivos modificados con rutas relativas. Como se mencionó anteriormente, la actualización funciona en archivos individuales mientras que la verificación funciona en módulos. La opción ''--parents'' obliga a la creación de directorios en su copia de trabajo según sea necesario.
Tenga en cuenta que la actualización también tiene una opción ''--changelist'' (al menos en v.1.7.1 +), pero no parece estar haciendo lo que quería.
Creo que es posible que estés usando el término "desproteger" aquí en su sentido de CVS, es decir, una "actualización svn". ¿Está bien?
Si es así, puede actualizar a la revisión particular que desee:
svn update -r12345
O incluso solo esos archivos a esa revisión:
svn update -r12345 file1 file2 file3
aunque tendrá que obtener la lista de archivos de svn usando algunas de las otras sugerencias.
Creo que una extracción de Subversion solo puede desproteger una carpeta específica y no archivos individuales. Dicho esto, el comando:
svn log -r *revision* -q -v
listará los cambios asociados con la revisión especificada para que pueda procesar el resultado de este comando para ayudar a copiar los archivos deseados en algún lugar después de revisar una carpeta de trabajo para el directorio completo.
Lamento haber resucitado una pregunta muerta hace mucho tiempo, pero nunca fue respondida satisfactoriamente.
Puedes crear una herramienta simple para hacer esto por ti usando SVNKit. Encontré este blog respecto, y modifiqué ligeramente el código para mis necesidades. Lo estoy usando hasta el día de hoy en mi proceso de implementación.
Hace una exportación, no un checkout, pero estoy seguro de que sería un cambio simple.
Necesitaba un volcado de todos los archivos que habían cambiado dentro de un rango de una docena de revisiones. Lo hice así (estos comandos pueden no ser perfectos, esto es solo una explicación general):
Cree un diff que muestre los archivos que necesita y escriba la lista en un archivo de texto
svn diff --summarize -r219:232 > r219-232_Summary.txt
Esto le dará un archivo de texto con líneas como
M path/to/file.php
Dé masajes al formato de archivo para reemplazar el comienzo de cada línea con un comando ''svn up'', en lugar de ''A'' o ''M'' o lo que sea.
sed -i ''s/A /svn up /g'' ./r219-232_Summary.txt
... que te dará líneas como
svn up path/to/file.php
Crea un nuevo directorio y revisa tu proyecto.
svn co http://www.repo.net/whatever
Elimine todo en el directorio, excepto el archivo .svn (estoy usando un cliente svn relativamente reciente, por lo que si está en un cliente svn antiguo que tiene un .svn en cada directorio, no estoy seguro de cómo funcionará)
rm -rf ./*
Copie en su archivo de texto, conviértalo en ejecutable y ejecútelo como un script.
cp /path/to/wherever/r219-232_Summary.txt ./r219-232_Summary.sh
chmod 777 ./r219-232_Summary.sh
./r219-232_Summary.sh
Si todo va según lo planeado, entonces el shell debe analizar cada comando ''svn up'' en su archivo de texto y llenar el directorio solo con los archivos que le interesan.
Puede obtener solo la lista de archivos en un cambio particular usando
svn log -v -q -r rev
Luego puede limpiar los marcadores en el frente de la línea con una tubería como
sed -e "s/^ . / /" | egrep -v "Changed paths:|-----"
. Para obtener solo los archivos, probablemente use svn cat
como lo sugiere Nikolai.
[editado para limpiar y simplificar la tubería de sed.]
Puede verificar la lista de archivos afectados usando svn log -q -v -r123 url
.
Si realmente solo desea obtener los archivos afectados, puede usar svn cat urlToFile -r123 > myfile
para cada archivo.
Sé que es un poco offtopic pero uso TRAC para hacer esto y exporta solo los archivos modificados entre 2 revisiones como un archivo zip con los archivos en su estructura de directorio original.
Si está utilizando una versión reciente de svn, puede retirar una carpeta vacía y luego actualizar los archivos específicos.
después de obtener su lista de archivos para seleccionar,
svn co --depth=empty url dest
cd dest
svn up file1 file2 file3
Edición: prácticamente la misma solución que la respuesta aceptada aquí: desproteger un archivo de Subversion
puede obtener una lista de archivos modificados desde una revisión específica como esta:
svn diff -r [REVNUM]:HEAD --summarize > fileschanged.txt
luego cree un script para verificar cada archivo en el fileschanged.txt
svn checkout
solo funciona a nivel de directorio, no a nivel de archivo. Por supuesto, si todos los cambios en un conjunto de cambios específico eran del mismo directorio, entonces puede realizar el svn checkout <url> <path> -r<revid>
.
svn mergeinfo --show-revs elegible http: //base.com.rev1 http: //base.com.rev2
Esto dará muchas revisiones.
Ahora le gustaría ver la lista de archivos en cada revisión. Así que tome la lista de revisiones y copie en el bloc de notas o editplus y modifíquelas para que encajen en una sola línea
svn log -r r33521 -r33762 -3456 -r5623 -q -v >> missedFiles.txt
Nota: tuve 118 revisiones y no pude obtener la lista de archivos correctamente. Así que ejecuté el comando anterior dividiendo en subconjuntos de revisión