ignorando cualquier directorio 'bin' en un proyecto git


1237

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 lo que está debajo). He intentado 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 funcionar) 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 agrego 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 se ignoren :)


14
Probablemente alguien lo encuentre útil: si tiene pocos repositorios y cada uno tiene el mismo archivo .gitignore, puede ponerlo en una ubicación "común" y ejecutar> git config --global core.excludesfile ~ / .gitignore_global El último parámetro es la ruta a la ubicación común. PD: Soy nuevo en git y no estoy seguro de si esa es la recomendación de 'mejores prácticas' Por favor, avíseme si no desea hacer eso. Gracias.
Budda

La **sintaxis parece ahora (marzo de 2013, git 1.8.2) documentada oficialmente: vea mi respuesta a continuación
VonC

2
Si alguien quiere leer la versión más actualizada de la página del manual actual, vea la página del manual de gitignore (5) .

opción más amigable si estás cansado de leer ensayos para obtener el valor de una línea en atlassian.com/git/tutorials/saving-changes/…
suazithustra

Respuestas:


1835

Antes de la versión 1.8.2, **no tenía ningún significado especial en el .gitignore. A partir de 1.8.2, git admite **cero o más subdirectorios (consulte las notas de la versión ).

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

bin/

En la manpágina, hay un ejemplo de ignorar un directorio llamado foousando un patrón análogo.

Editar: si ya tiene carpetas bin en su índice git que ya no desea rastrear, entonces debe eliminarlas explícitamente. Git no dejará de rastrear rutas que ya se están rastreando solo porque ahora coinciden con un nuevo .gitignorepatrón. Ejecute una carpeta remove ( rm ) del índice solamente ( --cached ) recursivamente ( -r ). Ejemplo de línea de comando para la carpeta bin raíz:

git rm -r --cached bin

72
Comenzando con git 1.8.2, git aceptará **en .gitignorearchivos (fuente: 1.8.2 changelog )
Carlos Campderrós

15
es binlo mismo de bin/?
Nisba

29
@Nisba, son diferentes, binignorarán los archivos llamados bin, mientras bin/que para los directorios llamados bin
Rani Kheir

8
desde que caí sobre esto: el nombre de la carpeta en git-command ES distingue entre mayúsculas y minúsculas :) "bin! = Bin" - tal vez le dejo a alguien unos minutos por esta pista :)
dba

1
En windows10 no puede crear un archivo .gitignore, debe crear un gitignore.txt y luego ejecutar ren gitignore.txt .gitignore en el símbolo del sistema para crear este archivo
mal estado el

463

El .gitignorede tu sueño parece ser:

bin/

en el nivel superior


Muchas gracias por su ayuda, simplemente no olvide revisar el ejemplo de los archivos ignorados: git checkout bin *
Chris Sim

1
ponlo en gitignore_global
μολὼν.λαβέ

@GAlexander, ¿por qué querría ignorar globalmente bin / directorios? A menudo tienen contenido versionado. E ignorar globalmente no afectará a otros usuarios del repositorio.
Michael Krelin - hacker

234

Creo que vale la pena mencionar para los principiantes de git:

Si ya tiene un archivo registrado y desea ignorarlo, Git no ignorará el archivo si agrega una regla más adelante . En esos casos, primero debe rastrear 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 existen) 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/


si generalmente hago un git add -Aen mis commits, ¿puedo usar esto en su lugar? ¿y puedo reemplazar el punto con -A en la primera línea también?
ajax333221

69

El **no funcionaba correctamente antes, pero desde Git 1.8.2 (marzo 8 de 2013) , parece ser mencionado y apoyado de forma explícita:

Los patrones .gitignorey los .gitattributesarchivos pueden tener **/, como un patrón que coincida con 0 o más niveles de subdirectorio .

Por ejemplo, " foo/**/bar" coincide " bar" en " foo" sí mismo o en un subdirectorio de " foo".

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

/main/**/bin/

46
[Bb]in/

coincide con mayúsculas y minúsculas


2
[B]in/será la única mayúscula
Gank

¿Cómo dejar que solo la Bincarpeta ignore y dejar que se bincomprometa con git? [B]in/ambos se comprometerán Biny bin.
Gank

55
Esto debería hacerlo, @Gank: Bin/ !bin/
Marco G

34

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


3
Esta no es una respuesta a la pregunta original que era explícitamente sobre bin, no Bin.
CB Bailey

50
Aunque no es una respuesta, se agrega a la integridad de otros que buscan el mismo problema (yo mismo, ahora mismo).
Jay

25

[Bb]in resolverá 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*/

3
Nota: cosas como esta debe estar en su gitignore GLOBAL (por lo general en su directorio personal.) El gitignore proyecto sólo debe ignorar cosas específicas a su proyecto (es decir, archivos .o para una aplicación C.)
BraveNewCurrency


18

Paso 1: Agregue el siguiente contenido al archivo .gitignore.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

Paso 2: asegúrese de tener efecto

Si el problema persiste, eso se debe a que la configuración en .gitignore solo puede ignorar los archivos que originalmente no fueron rastreados . Si algunos archivos ya se han incluido en el sistema de control de versiones, la modificación de .gitignore no es válida. Para resolver este problema por completo, debe abrir Git Bash o Package Manager Console (vea la captura de pantalla a continuación) para ejecutar los siguientes comandos en la carpeta raíz del repositorio.

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

Consola PM Entonces el problema estará completamente resuelto.


8

Literalmente, ninguna de las respuestas realmente funcionó para mí; el único que funcionó para mí fue (en Linux):

**/bin
(yes without the / in the end)

git version 2.18.0 

¿Ignoraba eso también todas las carpetas nombradas binen los subdirectorios?
vineeshvs

5

Como un aviso;

Si piensa .gitignoreque no funciona de alguna manera (así que agregó la foo/*carpeta pero git statusaún muestra los contenidos de la carpeta como modificados o algo así), puede usar este comando;

git checkout -- foo/*


3

para 2.13.3 en adelante, escribir solo bin en su archivo .gitignore debería ignorar el bin y todos sus subdirectorios y archivos

compartimiento


2

Agregar ** / bin / al archivo .gitignore fue el truco para mí (Nota: la carpeta bin no se agregó al índice).


1

Si el patrón interior .gitignoretermina con una barra inclinada /, solo encontrará una coincidencia con un directorio.

En otras palabras, bin/coincidirá con un directorio biny rutas debajo de él, pero no coincidirá con un archivo normal o un enlace simbólico bin.


Si el patrón no contiene una barra oblicua , como en binGit, lo trata como un patrón de globo (codicioso). Así que lo mejor sería usar simple /bin.

bin No sería la mejor solución para este problema en particular.


¿Quiso decir 'comenzar con' a /?
vineeshvs

0

En mi caso, la codificación del archivo gitignore fue problemática, verifique si es UTF-8

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.