2009-05-19 14 views
38

¿Hay alguna manera de ignorar los cambios en algunos archivos en una confirmación con mercurial?¿Hay una opción de ignorar en el compromiso en mercurial?

Tengo una situación específica en la que tenemos un archivo oracle tnsnames.ora predeterminado que apunta a 127.0.0.1, pero algunos desarrolladores lo modificarán para apuntar a otros sistemas, pero no queremos cambiar el predeterminado archivo.

En subversión, he agregado esto simplemente a la lista de cambios de ignorar en la confirmación. ¿Hay alguna manera de hacer esto en mercurial?

Respuesta

48

Si los archivos que desea omitir del comando "hg commit" ya están "rastreados", debe usar la opción -X. El patrón pasado a -X es bastante flexibles, por lo que es posible ejecutar, por ejemplo:

% hg stat 
A etc/foo.conf 
M src/bar.c 
M lib/libbar/loader.c 
% hg commit -X '**.conf' 

para evitar cometer cualquier archivo con la extensión ".conf", independientemente de la profundidad en el árbol de fuentes que vive. En el espacio de trabajo que se muestra arriba, esto confirmaría "src/bar.c" y "lib/libbar/loader.c" pero no "etc/foo.conf".

Para excluir varios patrones de nombres de archivo, utilice múltiples opciones -X, es decir .:

% hg commit -X '**.conf' -X '**.sh' 
+8

Consulte "hg help patterns" para obtener información sobre los patrones de estilo "**. Conf". –

+0

¿Hay alguna manera de hacer esto permanente? No quiero -X en cada commit. – Kugel

+0

@Kugel No se ve así. Mercurial me está golpeando como una opción pésima para una base de código con como 20 archivos de configuración que tienen elementos específicos del usuario en ellos. No debería tener que escribir scripts para que el control de versiones funcione para mí en lugar de contra mí. Y no, los 20 archivos de configuración tampoco eran mi idea. Supongo que ese tipo también eligió Mercurial también. –

-2

Busque el archivo .hgignore en la documentación de Mercurial.

Aquí hay un ejemplo de archivo de ignorar.

 # use glob syntax. 
     syntax: glob 

     *.elc 
     *.pyc 
     *~ 

     # switch to regexp syntax. 
     syntax: regexp 
     ^\.pc/ 
+0

El archivo tnsnames.ora ya se registró. Quiero hacer caso omiso de mis cambios locales, ya que son sólo para mi máquina. Esta es la razón por la cual .hgignore no funciona –

1

Usted podría alias de comprometerse a algo así como 'hg commit excluded_file.ext -X' nunca he utilizado mercurial, así que sólo voy por la página del manual aquí.

21

Tradicionalmente, esto se soluciona al no versionar el archivo en sí, sino al crear versiones de una copia del mismo como plantilla para que otros lo utilicen.

Así que usted podría hg mv tnsnames.ora tnsnames.ora-template, luego confirmar, luego hacer una copia directa del sistema de archivos de tnsnames.ora-template a tnsnames.ora, y agregar tnsnames.ora al archivo .hgignore.

Los cambios posteriores en la plantilla seguirán siendo eliminados, pero en realidad no cambiarán el entorno de trabajo a menos que alguien copie la plantilla en el archivo real.

+1

Así que si tiene app.config y le cambia el nombre a app.config-template, ya no habrá un app.config en el repositorio. Esto causará problemas con una compilación automatizada. Supongo que el proceso de compilación debe ser informado de esta 'plantilla' y cambiarle el nombre. Esto no es tan bueno. – AndyM

+2

No desea cambiar el nombre, desea copiar y modificar. Puedes hacer eso desde tus scripts de autobuilding o puedes hacerlo desde un hook, pero de cualquier forma si tienes archivos que van a ser diferentes de clone to clone, tendrá que haber alguna inteligencia aplicada en alguna parte. – Zed

Cuestiones relacionadas