.gitignore todos los archivos .DS_Store en cada carpeta y subcarpeta

561

Agregué .DS_Store al archivo .gitignore, pero parece que solo ignora .DS_Store en el directorio raíz, no en todas las carpetas y subcarpetas.

¿Cómo puedo solucionar esto?

vickyqiu
fuente
¿Cómo exactamente lo agregaste a .gitignore? Debería funcionar en todos los directorios (lo hace para mí).
Thilo
A mí también me funciona. También intenté cuando está al final del archivo, si tienes que tener una nueva línea (específica de la plataforma) pero eso no cambió que los directorios .DS_Store dentro de cualquier parte de la jerarquía todavía se ignoraron.
enorl76
La pregunta, según tengo entendido, fue: cómo ignorar fácilmente todas las apariciones de .DS_Store en todos los subdirectorios sin hacerlo manualmente en cada subdirectorio. Yo tuve el mismo problema. La respuesta a continuación muestra cómo resolverlo (los últimos 2 párrafos).
petrsyn

Respuestas:

648

Creo que el problema que tienes es que en alguna confirmación anterior, accidentalmente agregaste .DS_Storearchivos al repositorio. Por supuesto, una vez que se rastrea un archivo en su repositorio, se seguirá rastreando incluso si coincide con una entrada en un archivo .gitignore aplicable.

Debe eliminar manualmente los .DS_Storearchivos que se agregaron a su repositorio. Puedes usar

git rm --cached .DS_Store

Una vez eliminado, git debería ignorarlo. Sólo es necesario la línea siguiente en la raíz de su .gitignorearchivo: .DS_Store. ¡No olvides el período!

git rm --cached .DS_Store

elimina solo .DS_Storedel directorio actual. Puedes usar

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

para eliminar todo .DS_Storesdel repositorio.

Consejo de fieltro: dado que probablemente nunca quieras incluir .DS_Storearchivos, crea una regla global. Primero, haga un .gitignorearchivo global en alguna parte, por ejemplo

echo .DS_Store >> ~/.gitignore_global

Ahora dile a git que lo use para todos los repositorios:

git config --global core.excludesfile ~/.gitignore_global

Esta página me ayudó a responder tu pregunta.

Edward Newell
fuente
41
Los últimos 2 párrafos responden esta pregunta. Gracias.
petrsyn
70
´´git rm --cached .DS_Store´´ elimina solo un .DS_Store del directorio actual. Use ´´find. -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch´´ para eliminar todos los .DS_Stores del repositorio
auco
44
Una lista de otros archivos comunes para ignorar podría ser útil
geotheory
14
Mala idea de usar la regla global IMO: Intentar mantener configuraciones globales en múltiples usuarios / máquinas nunca funciona; desea que las reglas que rigen su repositorio en el repositorio mismo. De acuerdo con esto
Yarin
15
No estoy de acuerdo contigo (Aunque he votado tu comentario porque creo que es perspicaz). Si lo hacemos de manera global, entonces todos los usuarios de Mac deben hacerlo, pero solo una vez. Si hacemos un amplio repositorio, entonces debemos hacerlo para cada repositorio. No sé sobre ti, pero hago nuevos repositorios todo el tiempo. Al hacerlo globalmente, uno resuelve el problema de una vez por todas.
Edward Newell
356

Agregar **/.DS_Storeen .gitignoreel subdirectorio


Si .DS_Storeya está comprometido:

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

Para ignorarlos en todo el repositorio: (a veces se llama ._.DS_Store)

echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global
ronald8192
fuente
Todavía cargado en mi repositorio?
Freddy Sidauruk
@FreddySidauruk git rm --cached your_fileprimero
ronald8192
@FreddySidauruk Debería ser find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch, de: stackoverflow.com/questions/18393498/…
ronald8192
1
Parece que -fes necesario agregar si tiene archivos abiertos en las carpetas correspondientes:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Mehmet Kaplan
158

Si nunca se agregó .DS_Store a su repositorio git, simplemente agréguelo a su archivo .gitignore.

Si no tiene uno, cree un archivo llamado

.gitignore

En el directorio raíz de su aplicación y simplemente escriba

**/.DS_Store

En eso. Esto nunca permitirá que el archivo .DS_Store se filtre en tu git.

Pero, si ya está allí, escriba en su terminal:

find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

luego confirme y presione los cambios para eliminar .DS_Store de su repositorio remoto:

git commit -m "Remove .DS_Store from everywhere"

git push origin master

Y ahora agregue .DS_Store a su archivo .gitignore, y luego vuelva a confirmar y presione con las 2 últimas piezas de código (git commit ..., git push ...)

drjorgepolanco
fuente
3
¿Por qué doble asterisco? Qué significa eso?
MilanG
1
@MilanG es una palabra clave que básicamente significa 'buscar en este directorio y en todos los subdirectorios'.
lachie_h 05 de
1
No estoy seguro de que sea una explicación perfecta de lo que significa el doble asterisco. Es un comodín. Podría *o **dependiendo de lo que quiera lograr. Es una forma de decirle al shell cómo navegar por los directorios. Esta respuesta de stackoverflow lo explica completamente stackoverflow.com/a/28199633/4092170
El'Magnifico
** nunca coincidirá con directorios ocultos (./): facelessuser.github.io/wcmatch/glob
Jonathan
En realidad, esto funciona ... debe marcada como respondida
Ichimaru
85

Su archivo .gitignore debería verse así:

# Ignore Mac DS_Store files
.DS_Store

Siempre que no incluya una barra inclinada, se compara con el nombre del archivo en todos los directorios. (desde aquí )

Yarin
fuente
todavía está subido al repositorio
Freddy Sidauruk
@FreddySidauruk, entonces tienes que corrergit rm --cached path/to/file/here
Sgnl
23

Paso 1, borra todos los *.DS_storearchivos. Uno puede correr

git rm -f *.DS_Store

¡pero ten en cuenta que rm -fpuede ser un poco peligroso si tienes un error tipográfico! Paso dos: agregue

*.DS_Store
.DS_Store

a .gitignore. ¡Esto funcionó para mí!

huesos de viaje
fuente
13

Añadir *.DS_Storea su archivo .gitignore. Eso me funciona perfectamente

Jacob
fuente
11

También puede agregar el --cachedindicador a la respuesta de auco para mantener archivos locales .DS_store, como lo mencionó Edward Newell en su respuesta original. El comando modificado se ve así: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch.. ¡Gracias y gracias!

Andrew Wilhelm
fuente
5

Paso: 1) Eliminar los archivos existentes con este comando

encontrar . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

Paso: 2) Agregue .DS_Store en su archivo .gitignore

Paso: 3) Confirma tus cambios en .gitignore git add .gitignore git commit -m "eliminado .DS_Store"

vishnu
fuente
3
  1. $ git rm ./*.DS_Store - eliminar todo .DS_Store de git
  2. $ echo \.DS_Store >> .gitignore - ignorar .DS_Store en el futuro

comprometerse y empujar

mate.gwozdz
fuente