version control - Mercurial: cómo ignorar los cambios en un archivo rastreado
version-control configuration-files (8)
Escribimos una extensión para este llamado exclude . Agregará automáticamente las opciones -X
en los comandos que las admiten, por lo que hg status
y hg commit
no verán el archivo modificado. Funciona leyendo un archivo .hgexclude
desde la raíz de su repositorio, al igual que el archivo .hgignore
. Usted agrega los archivos que desea excluir allí:
syntax: glob
db.conf
La extensión funciona bastante bien, pero hay una situación conocida en la que falla: las fusiones y la confirmación que sigue a una fusión (esto se documenta en la wiki). Debería mejorarse para guardar las modificaciones en un archivo temporal y luego restaurarlas. Por favor, póngase en contacto si necesita esta función.
Tengo un archivo con la configuración de la base de datos en mi proyecto que he establecido en algunos valores predeterminados. Mercurial hace un seguimiento del archivo y lo registra. Dado que este archivo se editará con diferentes valores en varias máquinas de desarrollo, ¿hay alguna manera de que Mercurial pueda ignorar los nuevos cambios en este archivo?
Intenté agregar el archivo al archivo .hgignore
, pero como se rastrea el archivo, no se ignora. Esto está bien y es bueno en otras situaciones, pero me pregunto si hay algo que pueda hacer aquí.
No hay un proceso realmente automatizado, pero puede probar (como en esta pregunta SO ) la opción -X
en hg commit
:
% hg stat
M myfile
% hg commit -X ''myfile''
(Otras soluciones pueden implicar dejar de lado o hq )
Sin embargo, esta no es la solución "correcta". Prefiero recomendar la versión:
- una plantilla de archivo
- un script capaz de generar el archivo final (que modificas pero que puedes ignorar por completo)
Por lo general, usted verificará una copia de referencia del archivo y hará un seguimiento del mismo, luego hará que los desarrolladores hagan una copia de eso para el desarrollo local, no querrá que los desarrolladores editen el archivo de origen controlado para sus propios entornos.
Si su sistema de configuración lo admite, es aún más fácil si puede usar un archivo de anulación que simplemente anule los valores en la copia de referencia (por ejemplo, la cadena de conexión de la base de datos). De esa manera, los desarrolladores solo tienen que mantener un conjunto local mínimo de valores de anulación.
Puedes intentar hg forget
. Para más detalles, consulte el manual oficial sobre el mismo comando . Funciono para mi
Creo que algo como esto está más cerca de una respuesta correcta a la pregunta original Mercurial: cómo ignorar los cambios en un archivo rastreado , en lugar de que otros sugieran una plantilla, etc.
Si el archivo ya está siendo rastreado, puede emitir el comando Forget al archivo. Si está utilizando TortoiseHg, haga clic derecho en el archivo durante la confirmación y seleccione Olvidar. El archivo también debe estar ya en la lista de ignorados.
Tuve el mismo problema que el tuyo, el archivo sigue apareciendo en todos los compromisos, aunque ya está en la lista de ignorados. Intenté el comando Olvidar e hizo el truco.
Si está utilizando TortoiseHG, abra la Configuración para el repositorio, vaya a la sección Confirmar (segundo icono abajo a la izquierda) y agregue los nombres de archivo a la lista de exclusión automática a la derecha (~ tercero desde la parte inferior en el lista).
Si siempre desea ignorar el archivo, puede agregar la opción -X
como opción predeterminada para commit
su archivo de configuración .hg/hgrc
:
[defaults]
commit = -X program.conf
Usar una plantilla de archivo es definitivamente la mejor solución. Por ejemplo, si tiene un archivo database.ini
, .hgignore
un archivo database.ini.template
e ignore database.ini en .hgignore