Pregunta ignorando cualquier directorio 'bin' en un proyecto git


Tengo una estructura de directorios como esta:

.git/
.gitignore
main/
  ...
tools/
  ...
...

Dentro de main y tools, y cualquier otro directorio, en cualquier nivel, puede haber un directorio 'bin', que quiero ignorar (y quiero ignorar todo debajo de él también). He probado cada uno de estos patrones en .gitignore pero ninguno de ellos funciona:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

¿Puede alguien ayudarme? El primer patrón (el que creo que debería estar funcionando) funciona bien si hago esto:

/main/**/bin/**/*

Pero no quiero tener una entrada para cada directorio de nivel superior y no quiero tener que modificar .gitignore cada vez que agregue uno nuevo.

Esto está en Windows usando el último msysgit.

EDITAR: una cosa más, hay archivos y directorios que tienen la subcadena 'bin' en sus nombres, no quiero que esos sean ignorados :)


977
2017-09-24 09:13


origen


Respuestas:


Antes de la versión 1.8.2, ** no tenía ningún significado especial en el .gitignore. Desde 1.8.2 git admite ** para significar cero o más subdirectorios (ver Notas de lanzamiento)

La forma de ignorar todos los directorios llamados bin en cualquier lugar por debajo del nivel actual en un árbol de directorios es con un .gitignore archivo con el patrón:

bin/

En el man página, hay un ejemplo de ignorar un directorio llamado foo usando un patrón análogo.

Editar:  Si ya tiene carpetas bin en su índice git que ya no desea rastrear, deberá eliminarlas explícitamente. Git no dejará de rastrear rutas que ya están siendo rastreadas solo porque ahora coinciden con un nuevo .gitignore patrón. Ejecutar una carpeta eliminar (rm) solo del índice (- caché) recursivelly (-r) Ejemplo de línea de comando para la carpeta del bin raíz:

git rm -r --cached bin

1472
2017-09-24 09:35



los .gitignore de tu sueño parece ser:

bin/

en el nivel superior.


399
2017-09-24 09:16



Creo que vale la pena mencionar para principiantes git:

Si ya tiene un archivo registrado y desea ignorarlo, Git   no ignorará el archivo si agrega una regla más tarde. En esos casos, tú   primero debe destrabar el archivo, ejecutando el siguiente comando en su   terminal:

git rm --cached

Entonces, si desea agregar para ignorar algunos directorios en su repositorio local (que ya existe) después de editar .gitignore, desea ejecutar esto en su directorio raíz

git rm --cached -r .
git add .

Básicamente, 'actualizará' su repositorio local y eliminará los archivos ignorados.

Ver:

http://git-scm.com/docs/git-rm,

https://help.github.com/articles/ignoring-files/


176
2018-05-13 08:54



los ** nunca funcionó correctamente, pero desde git 1.8.2 (8 de marzo de 2013), parece ser explícitamente mencionado y respaldado:

Los patrones en .gitignore y .gitattributes archivos puede tener **/, como un patrón que coincide con 0 o más niveles de subdirectorio.

P.ej. "foo/**/bar" partidos "bar"en"foo"en sí mismo o en un subdirectorio de"foo".

En su caso, eso significa que esta línea podría ser ahora compatible:

/main/**/bin/

68
2018-04-23 09:20



[Bb]in/

coincide con mayúsculas y minúsculas


43
2017-08-30 05:32



No lo he visto mencionar aquí, pero parece ser sensible a mayúsculas y minúsculas. Una vez que cambié a / Bin los archivos fueron ignorados como se esperaba.


30
2017-10-08 22:00



[Bb]inresolverá el problema, pero ... Aquí hay una lista más extensa de cosas que debe ignorar (lista de muestra de GitExtension):

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/

23
2018-01-03 00:23



Si estás buscando una gran empresa global .gitignore archivo para cualquier solución de Visual Studio (.NET). Te recomiendo que uses este: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

AFAIK tiene el más completo .gitignore para proyectos .NET.


16
2017-07-30 14:33



Como un aviso;

Si piensas .gitignore no funciona de una manera (por lo tanto, foo/* carpeta en ella, pero git status sigue mostrando los contenidos de la carpeta modificada o algo así), entonces puede usar este comando;

git checkout -- foo/*


5
2018-02-17 09:33