Forzar agregar a pesar del archivo .gitignore


413

¿Hay alguna forma de forzar la gitadición de un archivo a pesar del .gitignorearchivo?


44
Una mejor pregunta puede ser: ¿por qué querrías hacer eso? Si desea realizar un seguimiento de un archivo, anótelo (prefija su patrón en el .gitignorearchivo con !, por ejemplo !dont/ignore/this/file).
— Ohad Schneider

66
@OhadSchneider Esto es útil si obliga a comprometer los archivos de compilación a otra rama. Algunos proyectos hacen esto, como StrongLoop para implementaciones seguras
— Deminetix

55
@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 excelente 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 a los que se hace referencia manualmente en la solución. Para esos proyectos, nos gustaría incluirlos manualmente, en lugar de decirle a cada desarrollador que comente los archivos * .dll y * .exe en el gitignore global.
— Nullius

44
@Nullius ¿No puedes ignorarlos en un nivel superior .gitignore(por ejemplo, agregar uno .gitignoreen la misma carpeta que el dll, o uno de arriba, o algo así)?
— Ohad Schneider

Respuestas:


570

Ver man git-add:

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

Así que ejecuta esto

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

11
Uhm eso no funciona, en el estado de git el archivo todavía no se muestra
— Mark

55
Bueno, lo probé para asegurarme de que realmente funciona y funciona. ¿Puedes describir tu entorno (SO, versión git ...)? Esto es lo que básicamente he hecho: echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works(no puedo pegar nuevas líneas en el comentario, ejecutar los comandos 1 por 1
— Daniel Böhmer

44
Lo mismo me sucedió, anteriormente había ejecutado git update-index --asume-inalterado en mis archivos. Tuve que deshacerlo con --no-asumir-sin cambios y funcionó
— Jako

44
Esto solo funciona para mí usando comodines, usando git 1.9.5 en Windows, incluso después de intentar --no - asumir-sin cambios. "git add - f <nombre de archivo>" no hace nada, pero "git add -f *" funciona. Usar TortoiseGit también funciona.
— mhenry1384

@ mhenry1384 La razón por la que funciona solo con comodines en Windows puede deberse a cómo se usa el separador de ruta. Para mí, la barra "/" funciona, pero la barra invertida "\" no. El hecho de que cmd / PowerShell convierta "/" a "\" para nosotros hace que sea más fácil encontrar esto.
— ohw

19

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

Si el archivo generalmente se ignora y fuerza la adición, puede volver a ignorarse accidentalmente en el futuro (como cuando se elimina el archivo, se realiza una confirmación y se vuelve a crear el archivo.

Simplemente debe ignorarlo en el archivo .gitignore de esa manera: Unignore subdirectorios de directorios ignorados en Git


44
Esto es correcto. Estaba usando la opción --force para archivos de datos pequeños, y luego reorganicé un poco la estructura de carpetas y golpeé todos los archivos con seguimiento forzado. SIN EMBARGO: en .gitignoreuso !specific-file-name.txtsin la jerarquía de carpetas, de esta manera el seguimiento seguirá el archivo alrededor del repositorio.
— Merlin

Depende del escenario, por ejemplo, en algún momento desea excluir "1.txt" en todas las carpetas, y en algún momento "folder1 / *. Txt"
— AS

15
Esa no es una solución "mejor". Es una solución a un problema diferente.
— aij

2

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


10
Estoy de acuerdo, esto no es lo que quieres hacer.
— Merlin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.