¿Algún sistema de control de origen que permita definir $ Palabras key $?

Me preguntaba si hay algún sistema de control de origen que permita a los administradores definir palabras key personalizadas que se reemplazan al registrarse con diferentes comportamientos (es decir, similares a $ Id $ o $ Author $, etc.)

Solo estoy familiarizado con SVN y CVS que tienen una list establecida de palabras key, pero habría aplicaciones para algo como $ LineNo $ o $ MyLicenceText $. Estoy seguro de que habrá otros casos de uso. La idea sería crear una architecture de complemento donde el comportamiento de una palabra key pueda definirse o modificarse.

Entonces mi pregunta es: ¿hay alguna herramienta (comercial o de código abierto) que ya tenga algo así?

Editar: Hacerlo como parte de la compilation es una forma válida de resolver el problema, sin embargo, podría causar problemas si un desarrollador no hizo una compilation antes del check-in. Imagine algo como $ LineNo $, si la compilation no estaba sincronizada exactamente con la fuente, el valor podría ser fácilmente incorrecto. Sin embargo, para las palabras key con más comportamiento estático (como $ MyLicenceText $) el reemploop en la compilation es una solución válida.

Puede mirar el atributo de filter que puede establecer con un file .gitattributes en Git . Esto le permite definir dos transformaciones, conocidas como borrones y limpias , que le permiten transformar un file de forma arbitraria cuando lo comtesting y lo transforma de nuevo cuando lo registra.

Como dijo Brian anteriormente para Git, Subversion también te permite hacer annotations de confirmación previa / posterior que podrían sustituir a $. Palabras key de este formulario $. Creo que el problema en el mundo de SVN es que realmente no deberías modificar los files.

Esto es lo que advierte el libro de SVN:

Mientras que los scripts de gancho pueden hacer casi cualquier cosa, hay una dimensión en la que los autores de scripts hook deben mostrar restricción: no modifique una transacción de confirmación utilizando scripts hook. Si bien podría ser tentador usar scripts de gancho para corregir automáticamente errores o deficiencias o infracciones de políticas presentes en los files que se están cometiendo, hacerlo puede causar problemas. Subversion mantiene los cachings del lado del cliente de ciertos bits de datos del repository, y si usted cambia una transacción de compromiso de esta manera, esos cachings se vuelven indetectablemente obsoletos. Esta incoinheritance puede llevar a un comportamiento sorprendente e inesperado. En lugar de modificar la transacción, simplemente debe validar la transacción en el enlace precompromiso y rechazar la confirmación si no cumple con los requisitos deseados. Como beneficio adicional, los usuarios aprenderán el valor de los hábitos de trabajo cuidadosos y orientados al cumplimiento.

¿Hay alguna razón por la que no puedas hacer esto durante el process de compilation con Ant o Maven?

¿Por qué no usas un gatillo? ¿No funcionaría?

¿Algo como pre-checkout (o preactualización, según la jerga) y preinscripción?