Listar todo svn: externals recursively?


¿Cómo puedo obtener una lista de todos los svn:externos (recursivamente) en un directorio? Hay alguna utilidad para esto?

(Estoy usando Windows (y tortoise))

Tengo un montón de svn:externals enlazando a diferentes partes compartidas de mi proyecto y cuando me branch suele ser bastante propenso a errores para encontrar todos los externals y cambiarlos para que el enlace a las rutas dentro de la nueva rama.

Author: daveb, 2009-03-25

6 answers

Haga lo siguiente en la raíz de su copia de trabajo:

svn propget svn:externals -R

Como se discute en los comentarios a continuación, esto no lista los externos en externos.

Nota para los usuarios de TortoiseSVN: hay una opción en el instalador de TortoiseSVN para instalar también el cliente de línea de comandos SVN. Esta opción no está habilitada de forma predeterminada.

 127
Author: Wim Coenen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-07 15:49:09

Cambiar Manualmente todas esas propiedades externas suena tedioso. ¿Ha visto la nueva funcionalidad para externos añadida en Subversion 1.5?

Subversion 1.5 da un gran paso para aliviar estas frustraciones. Como se mencionó anteriormente, las URL utilizadas en el nuevo formato de definición de externos pueden ser relativas, y Subversion proporciona magia de sintaxis para especificar múltiples sabores de relatividad de URL.

../

Relativo a la URL de la directorio en el que se establece la propiedad svn:externals

^/

Relativo a la raíz del repositorio en el que la propiedad svn:externals está versionada

//

Relativo al esquema de la URL del directorio en el que se establece la propiedad svn:externals

/

Relativo a la URL raíz del servidor en el que la propiedad svn:externals está versionada

Tal vez uno de esos ayudaría? Supongo que depende de exactamente cómo se está ramificando y cómo se ve la estructura de su repositorio.

 15
Author: Sebastian Celis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-25 17:03:06

Mi solución para TortoiseSVN:

Abra la "Rama/etiqueta..."diálogo del menú contextual SVN. El diálogo inferior muestra todos los externos, incluidos los externos anidados.

 8
Author: DrRobotNinja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-15 14:59:05

Tal vez, como solución alternativa, podría estructurar su proyecto de tal manera que todos los externos se establezcan en la misma carpeta, por ejemplo, en la carpeta del proyecto justo debajo del tronco. (Esto no significa que todas las carpetas externas tengan que estar a la misma profundidad, por cierto.) A continuación, puede hacer clic derecho en la carpeta de su proyecto, a continuación, Propiedades..., luego la pestaña Subversion, luego Propiedades... a continuación, haga doble clic en svn: externals.

 0
Author: Anonymous Coward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-18 09:39:49

Usé la respuesta de Wim Coenen y escribí el siguiente script para crear una lista de todas las revisiones:

getSvnRevs() {
  cd "$1"
  wcver="$(svnversion)"
  [ -n "$wcver" ] || panic "Unable to get version for $wcdir"
  echo "$1: $wcver"
  svn propget svn:externals -R | while read a b c d e; do
    [ -n "$a" ] || continue
    if [ "$b" = "-" ]; then
      wcparent="$a"
      wcdir="$wcparent/$c"
      [ -z "$e" ] || panic "Invalid format #1"
    else
      [ -n "$wcparent" ] || panic "Invalid format #2"
      wcdir="$wcparent/$a"
      [ -z "$c" ] || panic "Invalid format #3"
    fi
    [ -d "$wcdir" ] || panic "Invalid directory: $wcdir"
    wcver="$(svnversion "$wcdir")"
    [ -n "$wcver" ] || panic "Unable to get version for $wcdir"
    echo "$1/$wcdir: $wcver"
  done
}

Afortunadamente, no tengo externos anidados, así que no tuve que probar esto y supongo que no funcionaría. Pero si usted necesita esto, es probablemente suficiente para llamar a esta función recursivamente. Además, nunca he probado con nombres de archivo que necesitan escapar. Es probable que no funcione entonces.

DESCARGO DE RESPONSABILIDAD: Sé que la pregunta original era sobre Windows, y el script de shell no funcionará allí a menos que estés usando Cygwin o algo similar.

 0
Author: Daniel Alder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-13 11:52:22

Tomé la respuesta de Daniel Alder, eliminé las llamadas svnversion y la hice recursiva (NOTA: read a b c d e no funciona si hay un espacio en la fuente o en el destino). Este es un script bash, por lo que necesitará algo como Cygwin o usar el subsistema de Windows para Linux.

getSvnExternals() {
  svnbase="$1"
  svnpath="$2"
  svn propget svn:externals -R "$svnbase/$svnpath" 2> /dev/null | while read a b c d e; do
    [ -n "$a" ] || continue
    if [ "$b" = "-" ]; then
      wcparent="$a"
      external="$c"
      wcdir=$(echo "$wcparent/$d" | sed s#^./##)
      [ -z "$e" ] || echo "WARNING: Invalid format #1. line='$a $b $c $d $e'"
    else
      [ -n "$wcparent" ] || echo "WARNING: Invalid format #2. wcparent=$wcparent"
      external="$a"
      wcdir=$(echo "$wcparent/$b" | sed s#^./##)
      [ -z "$c" ] || echo "WARNING: Invalid format #3. line='$a $b $c $d $e'"
    fi
    echo "$1/$wcdir: $external"
    ## recurse into external directory
    [ -d "$wcdir" ] && getSvnExternals "$1/$wcdir"
  done
}
 0
Author: paulie4,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-16 16:21:49