2011-09-08 16 views

Respuesta

2

Como se mencionó anteriormente, se puede utilizar auto-propiedades para hacer esto, pero debe hacerse una gran pregunta:

  • ¿Por qué desea utilizar las palabras clave?

Cuando se está haciendo el desarrollo, puede utilizar simplemente las diversas svn comandos para obtener alguna información que se almacena en las palabras clave, por lo que esto no es necesario.

Algunas personas afirman que las palabras clave son necesarias una vez que el software se encuentra en el sitio del cliente, pero existen mejores mecanismos para validar qué revisión de su software está utilizando. Por ejemplo, durante la compilación, puede crear un archivo con un ID de revisión más significativo (tal vez el número de versión y la fecha de compilación) y mostrarlo como una especie de "sobre caja". La identificación es más significativa.

También sé que no puedo confiar en las palabras clave que figuran en los scripts de shell que pueden encontrarse en el sitio de un cliente. El script de shell podría decir un número de revisión, pero el script de shell podría haberse editado.

Si realmente lo necesita, y es algo que debe aplicarse en su sitio, necesitará un desencadenante precompromiso para fallar cuando la propiedad de la palabra clave no se encuentre en un archivo. Las propiedades automáticas solo se pueden establecer para un cliente. Eso significa que debes asegurarte de que cada uno de tus desarrolladores tenga este conjunto. Cada vez que obtienen una computadora nueva, tendrás que verificarla nuevamente.

Tampoco garantiza que la propiedad esté en el archivo. Los archivos antiguos en el repositorio no se agregarán mágicamente, incluso si están editados. (Las propiedades automáticas solo se agregan cuando el archivo se agrega al repositorio). No hay nada que evite que el desarrollador lo elimine tampoco. O editando sus auto-propiedades en su configuración.

Debe utilizar un desencadenador precompromiso para garantizar que la propiedad svn: keywords se encuentre en todos y cada uno de los archivos donde sea necesario y que esté configurado correctamente. El gancho precompromiso simplemente se negará a realizar una transacción en la que esta propiedad no esté establecida. El desarrollador se verá obligado a agregar la propiedad. Después de algunas quejas, los desarrolladores configurarán su cliente de Subversion para usar auto-propiedades y mantenerlo ellos mismos.

Solo tengo un pre-commit trigger que puede hacer cumplir esto.El disparador está escrito en Perl, pero no requiere más que módulos estándar, por lo que es fácil de configurar. Puede configurarlo para decir qué archivos requieren la palabra clave y en qué se debe configurar. Si se está confirmando un archivo y no tiene el atributo svn: keywords establecido en el valor correcto, la confirmación fallará, y el mensaje de error explicará por qué falló la confirmación y qué debe hacer el desarrollador.

+0

1 Muy buen punto –

11

Sí, con propiedades de auto Subversion: http://www.dcepler.net/post.cfm/subversion-auto-properties

Cada entrada de la sección [auto-props] es un pegote de archivo seguido de las propiedades de Subversion para aplicar automáticamente cada vez que un archivo que coincida con el pegote es añade. Por ejemplo, si desea que todos los archivos de CPP tienen un cierto conjunto de propiedades por defecto, a continuación, siga las instrucciones que aparecen en http://www.dcepler.net/post.cfm/subversion-auto-properties y modificar la siguiente línea de acuerdo a sus preferencias:

 
*.cpp  = svn:eol-style=native; svn:keywords="Author Date Id Rev URL"; svn:mime-type=text/plain 

Tenga en cuenta que si se ha añadido archivos con svn add y posteriormente habilitó las propiedades automáticas, las propiedades automáticas no se aplicarán a los archivos agregados. Las propiedades automáticas solo se aplican a los archivos que se agregan después de habilitar propiedades automáticas.

+0

de nuevas ventanas del sistema operativo, el archivo de configuración podría estar en C: \ Users \ _user_ \ AppData \ Roaming \ Subversion – sartoris

1

Almacenamiento de palabras clave de SVN en nuestros programas PL/SQL (y scripts SQL) ha agregado un valor significativo a los procesos de desarrollo y la integridad del sistema. Cuando se envía un cambio a la producción, la palabra clave Revisión lo rastrea y administra. Antes de implementar esto, el proceso de mover archivos y asegurarse de que se estaba implementando el archivo correcto era muy propenso a errores. Además, podemos consultar la base de datos para ver los datos de la versión (ver SQL a continuación).

-- 
    --------- Begin Version Control Data---------------------------------------- 
    -- $LastChangedDate: 2014-06-27 13:45:09 -0500 (Fri, 27 Jun 2014) $ 
    -- $Revision: 1750 $ 
    -- $LastChangedBy: kilarvk $ 
    -- $URL: svn://jdcsubv01/SQL/JDC/Trunk/JDC_UTIL.pks $ 
    --------- End Version Control Data ----------------------------------------- 
    -- 

--select SVN Keyword Info 
SELECT OWNER, 
     NAME, 
     TYPE, 
     SUBSTR(TEXT,INSTR(TEXT,'$')-1) AS KEYWORD 
FROM ALL_SOURCE 
WHERE OWNER = UPPER(NVL('&owner',OWNER)) 
    AND NAME = UPPER(NVL('&&pgm_name',NAME)) 
    AND (text LIKE '%$Revision%' 
    OR TEXT LIKE '%$URL%' 
    OR TEXT LIKE '%$Id%' 
    OR TEXT LIKE '%$LastChanged%') 

Ejemplo:

JDCSCHEMA API_TESTER_AGNT PROCEDURE $LastChangedDate: 
2014-04-08 15:33:38 -0500 (Tue, 08 Apr 2014) $ 
JDCSCHEMA API_TESTER_AGNT PROCEDURE $Revision: 1445 $ 
JDCSCHEMA API_TESTER_AGNT PROCEDURE $LastChangedBy: vamsisx $ 
JDCSCHEMA API_TESTER_AGNT PROCEDURE $URL:svn://jdcsubv01/SQL/JDC/Trunk/API_TESTER_AGNT.prc $ 
+0

acuerdo - Creo que los desarrolladores Quienes compilan ejecutables a partir de estructuras de directorios a veces se olvidan de este tipo de escenario, donde puede haber parches incrementales, los entornos pueden haber sido copiados de la producción en diferentes momentos, y así sucesivamente, y es enormemente útil poder ver la rama real y información de revisión de un vistazo. Sí, debería existir un proceso de implementación robusto, sí, siempre es posible que el código se haya editado después de la implementación (aunque seguramente no lo hará), pero no hay nada como tener información generada automáticamente allí mismo en la fuente. –

Cuestiones relacionadas