2011-11-04 14 views
251

¿Hay alguna manera de forzar git para agregar un archivo a pesar del archivo .gitignore?Agregue fuerza a pesar del archivo .gitignore

+3

Una mejor pregunta puede ser: ¿por qué querrías hacer eso? Si desea rastrear un archivo, desactívelo (prefija su patrón en el archivo '.gitignore' con'! ', Por ejemplo'! Dont/ignore/this/file'). –

+4

@OhadSchneider Esto es útil si fuerza los archivos de compilación a otra rama. Algunos proyectos lo hacen como StrongLoop para implementaciones seguras – Deminetix

+4

@OhadSchneider Para nosotros, es más porque la mayoría de los desarrolladores instalan git con Visual Studio 2015, que agrega un gitignore global a la carpeta del usuario. Esto excluye archivos como * .dll y * .exe. Eso es genial para nuestros nuevos proyectos que solo usan paquetes nuget que se recuperan durante la compilación, pero para un pequeño número de proyectos más antiguos, todavía usamos DLL que se mencionan manualmente en la solución. Para esos proyectos, nos gustaría incluirlos manualmente, en lugar de decirle a todos los desarrolladores que comenten los archivos * .dll y * .exe en el gitignore global. – Nullius

Respuesta

354

Ver man git-add:

-f, --force 
     Allow adding otherwise ignored files. 

Así ejecutar este

git add --force my/ignore/file.foo 
+6

Uhm que no funciona, en estado de git el archivo aún no se muestra – Mark

+4

Bueno, lo probé para asegurarme de que realmente funciona y lo hace. ¿Puedes describir tu entorno (SO, versión de Git ...)? Esto es lo que básicamente hice: 'echo/foo" >> .gitignore; echo "bar"> foo; git add foo # debería arrojar un error; git add -p foo # works' (no se pueden pegar nuevas líneas en el comentario, ejecute los comandos 1 por 1 –

+1

mi error - clonado nuevamente el repositorio ahora funciona. Gracias – Mark

6

A pesar de solución de trabajo de Daniel Böhmer, Ohad Schneider ofreció una mejor solución en un comentario:

Si el archivo es usualmente ignorado , y lo fuerza a agregarlo; puede volver a ignorarlo accidentalmente en el futuro (como cuando se elimina el archivo, luego se realiza una confirmación y se vuelve a crear el archivo.

Usted sólo debe un-ignorarlo en el archivo .gitignore así: Unignore subdirectories of ignored directories in Git

+1

Esto es correcto. Estaba usando el --force opción para pequeños archivos de datos, y luego reorganizó un poco de carpeta s tructure y destruyó todos los archivos de seguimiento de fuerza. SIN EMBARGO: en '.gitignore' use'! Specific-file-name.txt' sin la jerarquía de carpetas, de esta manera el seguimiento seguirá el archivo alrededor del repositorio. – Merlin

+0

Depende del escenario, p. Ej. alguna vez quiere excluir "1.txt" en todas las carpetas, y en algún momento "folder1/*. txt" –

1

Otra forma de lograrlo sería a editar el archivo temporal gitignore, agregar el archivo y luego volver al gitignore. Un poco hacky me siento

+0

Acepto, esto no es lo que quiere hacer. – Merlin

Cuestiones relacionadas