2011-09-08 17 views
8

Usamos tortoise hg con Horno. En mi proyecto vs 2010 C# hay algunos archivos que son parte del repositorio, pero me gustaría torturarlos para que los ignore cuando realice una confirmación. Por ejemplo, digamos en una pantalla de inicio de sesión, puedo codificar el ID de usuario, la contraseña para la prueba. Realmente no quiero que se considere este archivo durante una confirmación. Entiendo el archivo .hgignore pero esto realmente funciona para archivos que no son parte del repositorio. ¿Algún truco en tortuga hg a ignorar los archivos que forman parte del informe? (para que no se muestren como modificados (M) durante una confirmación). Graciascómo ignorar archivos en horno/mercurial usando tortuga hg "que son parte del repositorio"

Respuesta

16

Siempre uso una combinación de .hgignore y BeforeBuild (en el archivo .csproj) para cosas como esta.

En uno de mis proyectos favoritos, tengo la siguiente configuración:

App.config contiene mi verdadero identificador de usuario y la contraseña codificada para la prueba.
App.config.example es idéntico, pero con datos falsos como "dummy_user" y "dummy_pw".

App.config es no parte del repositorio, y se ignora (en .hgignore).
App.config.example es parte del repositorio.

Entonces, he lo siguiente en el objetivo BeforeBuild en el archivo .csproj de mi solución:

<Target Name="BeforeBuild"> 
    <Copy 
    Condition="!Exists('App.config')" 
    SourceFiles="App.config.example" 
    DestinationFiles="App.config"/> 
</Target> 

Todo esto unido tiene el siguiente efecto:

  • el archivo de configuración con lo real los datos nunca se pueden asignar accidentalmente al repositorio, porque se ignora
  • el repositorio solo contiene el archivo de configuración con los datos de ejemplo
  • si alguien más clona el repositorio en su máquina, no tendrá el archivo de configuración "real" ... pero si falta, se creará automáticamente antes de la primera compilación de Visual Studio/MSBuild simplemente copiando el archivo .example (y luego puede simplemente poner su datos de inicio de sesión real en el archivo App.config recién creado).
  • si un App.config con datos de usuario codificados reales ya existe, no se sobrescribirán cuando se construye porque el evento BeforeBuild sólo ocurrirá si App.config hace no ya existen
+0

Buena solución. gracias – Gullu

+0

+1 usando la herramienta correcta para el trabajo –

1

Cuando realiza una confirmación de TortoiseHG, hay una lista de archivos con casillas de verificación. Deseleccione los archivos que no quiere que se agreguen.

O, en la línea de comando, realice una confirmación del formulario hg commit --exclude "pattern", donde se define el patrón en la página de manual de hg.

+0

Sí. Eso es lo que hago ahora, pero a veces me olvido de desmarcar esa casilla que mencionas ya que el archivo que no quiero comprometer está enterrado en el medio de un montón de archivos que quiero comprometer, y de ahí esta pregunta :-). gracias – Gullu

+0

@Gullu: He encontrado que la línea de comandos es el mejor enfoque para operaciones más complicadas en hg. Sugeriría un archivo "safecommit.bat" que excluye los archivos que tienen los datos confidenciales. –

+0

bien. Si nada más funciona, me aventuraré en el lado oscuro (línea de comando). gracias – Gullu

4

La respuesta de Christian es la correcta, pero quiero mencionar que TortoiseHg admite lo que desee con su Auto Exclude List.

Un problema con una lista de exclusión es que no puede funcionar con fusiones: debe comprometer todos los archivos cuando se fusiona, por lo que tendrá que bailar un poco con shelve, merge, commit y unshelve.

+0

¿Admite comodines? Una simple prueba indica que no es así y debo enumerar cada archivo por nombre, pero quería asegurarme de que no me faltaba algo. – Ben

Cuestiones relacionadas