2012-01-11 8 views
10

¿Es posible manipular una propiedad de subversión como svn:externals a través de una URL solamente? (Es decir, sin tener una copia de trabajo.)¿Cómo usar la propset de subversión contra una URL?

me gustaría un guión que los PIN svn:externals a una revisión en particular se proporciona una URL subversión, pero esto parece ser imposible:

$ svn propset foo bar https://example.com/svn/myproject/trunk 
svn: Setting property on non-local target 'https://example.com/svn/myproject/trunk' needs a base revision 

$ svn propset foo bar -r HEAD https://example.com/svn/myproject/trunk 
svn: Try 'svn help' for more info 
svn: Cannot specify revision for setting versioned property 'foo' 

$ svn propset foo bar --revprop -r HEAD https://example.com/svn/myproject/trunk 
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent 
svn: At least one property change failed; repository is unchanged 
svn: Error setting property 'foo': 
could not remove a property 

(tengo la misma resultados si utilizo un número de revisión real en lugar de HEAD también.)

Respuesta

4

No. Cambiar una propiedad en un archivo es como cambiar el archivo en sí; necesita un directorio de trabajo. Hay algunos comandos de Subversion que cambian la confirmación sin requerir una copia de trabajo: svn cp, svn mkdir y svn delete. Todo lo demás necesita un directorio de trabajo para realizar cambios.

Por cierto, se pueden realizar cambios en revisión propiedades sin una copia de trabajo. Las propiedades de revisión son cosas como el comentario de confirmación (svn: log), la identificación del ejecutor (svn: author) y la hora de la confirmación (svn: date).

+3

Parece que una solución es 'svn checkout --depth = empty' en un directorio temporal con' mktemp' o similar (esto es bastante rápido), use 'svn propset' para hacer el cambio, confirmar y luego eliminar el directorio temporal. – mjs

+2

Hay otra opción: svnmucc, que se incluye con fuentes SVN pero no se compila o no se instala por defecto. Puede leer sobre esto en http://svnbook.red-bean.com/en/1.8/svn.ref.svnmucc.re.html. – trent

+0

Agregando a la nota por @trent, TortoiseSVN ahora está agrupando svnmucc con el instalador a partir de la versión 1.8.1 y más reciente https://sourceforge.net/p/tortoisesvn/tickets/496/ –

9

Sí, aunque es un poco hackeo; SVN propedit puede cambiar de objetivo URL:

svn propedit foo --editor-cmd "echo bar>" http://example.com/svn/myproject/trunk -m "Property changed"

+0

que es un gran truco, pero es mejor especificar el mensaje en la línea de comando a través del indicador '-m'; de lo contrario, el editor también se invocará para el mensaje. –

+0

Tiene razón, por supuesto. Editando la respuesta. –

0

Sobre la base de Willem de excellent answer, aquí está un ejemplo que muestra cómo configurar SVN auto-props para needs-lock para todos los archivos y mime-type para determinadas extensiones utilizando una URL:

svn propedit svn:auto-props --editor-cmd "echo \"* = svn:needs-lock=* 
*.os = svn:mime-type=application/octet-stream 
*.osproj = svn:mime-type=application/octet-stream\" >" http://example.com/svn/myproject/trunk -m "Setting auto-props." 
3

Puede usar el comando svnmucc para establecer propiedades no interactivas de una URL como svn:externals.

Ejemplo:

$ svnmucc --root-url https://example.com/svn -m 'reference other/yap' \ 
    propset svn:externals "^/otherproject/tag/xyz other 
^/yetanother/tag/123 yap" myproject/trunk 

Nota que svnmucc también es compatible con otros comandos además propset y es posible de la cadena de múltiples comandos en una llamada (de ahí el nombre). El resultado es solo un conjunto de cambios.

El comando svnmucc es parte del paquete fuente de subversión y generalmente está disponible a través del administrador de paquetes de la distribución. Por ejemplo, Fedora 25 lo incluye en el paquete subversion-tools. OpenCSW incluso lo incluye en el paquete principal de subversión.

+0

Tu publicación debe marcarse como * Respuesta *. :) – bahrep

Cuestiones relacionadas