¿Cómo puedo eliminar archivos .DS_Store de un repositorio de Git?

Respuestas:

2432

Eliminar archivos existentes del repositorio:

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

Agrega la línea

.DS_Store

al archivo .gitignore, que se puede encontrar en el nivel superior de su repositorio (o creado si aún no está allí). Puede hacerlo fácilmente con este comando en el directorio superior

echo .DS_Store >> .gitignore

Entonces

git add .gitignore
git commit -m '.DS_Store banished!'
benzado
fuente
13
Es realmente trivial, pero el uso -execse iniciará git-rmuna vez para cada archivo .DS_Store, mientras xargsque colocará todas las rutas en una línea de comando. Principalmente prefiero xargsporque no tengo que preocuparme por escapar de muchos personajes especiales.
benzado
8
Esto debería usar .git / info / exclude, no .gitignore. Consulte stackoverflow.com/questions/1753070/… para obtener una explicación de la diferencia entre los dos.
Andrew Grimm
106
@ Andrew: No estoy de acuerdo. Nunca sería útil que un archivo .DS_Store se registre, por lo que tiene más sentido como una configuración de todo el repositorio para todos los usuarios, en lugar de algo que cada usuario de Mac necesita recordar para configurar en su propia máquina.
benzado
51
¿Agregar .DS_Storeal .gitignoretrabajo de forma recursiva? Es decir, ¿lo ignorará some/level/of/folders/.DS_Storetambién?
Charlie Schliesser
71
@CharlieS Sí, si el patrón no contiene una barra oblicua, se compara con el nombre del archivo en todos los directorios.
benzado
239

Combinando las respuestas de benzado y webmat, actualizando git rm, sin fallar en los archivos encontrados que no están en el repositorio, y haciéndolo pegar genéricamente para cualquier usuario:

# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore
Turadg
fuente
2
Descubrí que cuando uso un repositorio git en mi directorio de inicio (también conocido como un repositorio de "archivos de puntos"), tener ~/.gitignorecomo mi archivo de exclusión global es un fastidio. Hay archivos que quiero excluir de mi directorio de inicio que no quiero ignorar a nivel mundial. En su ~/.gitexcludeslugar, uso la misma directiva:core.excludesfile
AL the X
156

La mejor solución para abordar este problema es ignorar globalmente estos archivos de todos los repositorios git en su sistema. Esto se puede hacer creando un archivo global de gitignore como:

vi ~/.gitignore_global

Agregar reglas para ignorar archivos como:

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sql
*.sqlite

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

Ahora, agregue este archivo a su configuración global de git:

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

Editar:

Se eliminaron los iconos, ya que podrían necesitar ser confirmados como activos de aplicación.

Nervio
fuente
También puede agregar las reglas anteriores en el .gitignore de su repositorio. Esto mantendría alejados estos archivos a nivel de repositorio si hay múltiples contribuyentes a su proyecto. Sin embargo, en tales casos, .gitignore debería tratar con los archivos específicos de cada sistema operativo, etc., si diferentes desarrolladores están utilizando un sistema operativo diferente. Como reglas para Linux, OSX, etc.
Nerve
Recomendaría que cada desarrollador maneje sus archivos específicos del sistema operativo en su propio .global_ignore, de esa manera el proyecto .gitignore es específico del proyecto.
mcfedr
debe ejecutar: git add .gitignore_global, para que otros programadores también tengan ese archivo en su entorno local.
stackdave
58

En algunas situaciones, es posible que también desee ignorar algunos archivos a nivel mundial. Para mí, .DS_Store es uno de ellos. Así es cómo:

git config --global core.excludesfile /Users/mat/.gitignore

(O cualquier archivo de su elección)

Luego edite el archivo como un repositorio .gitignore. Tenga en cuenta que creo que debe usar una ruta absoluta.

webmat
fuente
26

Si no puede eliminar los archivos porque tienen cambios de uso por etapas:

git rm --cached -f *.DS_Store
Reggie Pinkham
fuente
19

Abra la terminal y escriba "cd <ProjectPath>"

  1. Eliminar archivos existentes: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. Agrega esto .DS_Store

  4. escriba "ctrl + x"

  5. Escriba "y"

  6. Ingrese para guardar el archivo

  7. git add .gitignore

  8. git commit -m '.DS_Store removed.'

Karthick Vadivel
fuente
nano .gitignorecrea el archivo si no está presente, este comando debe ejecutarse desde la carpeta raíz del proyecto
Saif
17

La respuesta más votada es increíble, pero ayudando a los novatos como yo, aquí se explica cómo crear el archivo .gitignore, editarlo, guardarlo, eliminar los archivos que quizás ya haya agregado a git y luego subir el archivo a Github.

Crea el archivo .gitignore

Para crear un archivo .gitignore, solo puede crear touchel archivo que crea un archivo en blanco con el nombre especificado. Queremos crear el archivo llamado .gitignore para que podamos usar el comando:

touch .gitignore

Ignorar los archivos

Ahora tiene que agregar la línea que le dice a git que ignore los archivos de DS Store en su .gitignore. Puedes usar el nano editor para hacer esto.

nano .gitignore

Nano es bueno porque incluye instrucciones sobre cómo salir de él. ( Ctrl- Opara guardar, Ctrl- Xpara salir)

Copie y pegue algunas de las ideas de este resumen de Github que enumera algunos archivos comunes para ignorar. Los más importantes, para responder a esta pregunta, serían:

# OS generated files #
######################
.DS_Store
.DS_Store?

Los # son comentarios y le ayudarán a organizar su archivo a medida que crece.

Este artículo de Github también tiene algunas ideas y pautas generales.

Eliminar los archivos ya agregados a git

Finalmente, debe eliminar esos archivos de DS Store de su directorio.

Utilice este gran comando de la respuesta más votada. Esto recorrerá todas las carpetas en su directorio y eliminará esos archivos de git.

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

Empuja .gitignore hasta Github

Último paso, debe confirmar su archivo .gitignore.

git status

git add .gitignore

git commit -m '.DS_Store banished!'

Joshua Dance
fuente
3
el comando táctil en sus pasos no es necesario ... nano creará el archivo por usted.
Corey Goldberg
1
Encontré mi propia respuesta 2 años después y la usé. Buen trabajo más allá de mí. :)
Joshua Dance
Funcionó a la perfección !! Gracias
iUser
15

Tuve que cambiar git-rm a git rm en lo anterior para que funcione:

find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
David Kahn
fuente
10

elimínelos usando git-rm, y luego agregue .DS_Store a .gitignorepara evitar que se agreguen nuevamente. También puedes usar blueharvest para evitar que se creen todos juntos

Nathan
fuente
9

En caso de que desee eliminar archivos DS_Store en cada carpeta y subcarpeta:


En caso de DS_Store ya comprometido:

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

Ignóralos por:

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

fuente
8

Lo siguiente funcionó mejor para mí. Se manejaron archivos inigualables y archivos con modificaciones locales. Como referencia, esto fue en un sistema Mac 10.7 con git 1.7.4.4.

Encuentra y elimina:

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

También ignoro globalmente .DS_Store en todos los repositorios estableciendo un archivo core.excludes global.

Primero, cree el archivo (si aún no existe):

touch ~/.gitignore

Luego agregue la siguiente línea y guarde:

.DS_Store

Ahora configure git para respetar el archivo globalmente:

git config --global core.excludesfile ~/.gitignore
jordantbro
fuente
8

Use este comando para eliminar los archivos existentes:

find . -name '*.DS_Store' -type f -delete

Luego agregue .DS_Storea.gitignore

Soleado
fuente
6

Descubrí que la siguiente línea de snipplr funciona mejor para borrar todo .DS_Store, incluido uno que tiene modificaciones locales.

find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print

--cachedopción, mantiene su local .DS_Storeya que de todos modos se reproducirá.

Y tal como se mencionó anteriormente, agregue .DS_Storeal archivo .gitignore en la raíz de su proyecto. Entonces ya no estará a la vista (de repositorios).

manat
fuente
5

Llego un poco tarde a la fiesta, pero tengo una buena respuesta. Para eliminar los archivos .DS_Store, use los siguientes comandos desde una ventana de terminal, pero tenga mucho cuidado al eliminar archivos con 'find'. Usar un nombre específico con la opción -name es una de las formas más seguras de usarlo:

cd directory/above/affected/workareas
find . -name .DS_Store -delete

Puede dejar el "-delete" si desea simplemente enumerarlos antes y después. Eso te asegurará que se han ido.

Con respecto al consejo ~ / .gitignore_global: tenga cuidado aquí. Desea colocar ese archivo agradable en .gitignore dentro del nivel superior de cada área de trabajo y confirmarlo, para que cualquiera que clone su repositorio obtenga el beneficio de su uso.

zeozod
fuente
4

Esto funcionará:

find . -name "*.DS_Store" -type f -exec git-rm {} \;

Elimina todos los archivos cuyos nombres terminan con .DS_Store, incluido ._.DS_Store.

John Topley
fuente
3
El asterisco no debe estar ahí.
Aristóteles Pagaltzis
3
el asterisco debería estar allí porque encontré archivos .DS_Store y ._. DS_Store en mi sistema Mac.
MutantMahesh
3
@MutantMahesh. En ese caso, es necesario "*.DS_Store", para que findel shell pase el asterisco en lugar de expandirlo.
TRiG
4

Por alguna razón, ninguno de los anteriores funcionó en mi mac.

Mi solución es de la ejecución del terminal:

rm .DS_Store

Luego ejecute el siguiente comando:

git pull origin master
Invencible
fuente
3
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force
JZ
fuente
3

Al inicializar su repositorio, omita el comando git que contiene

-u

Y no debería ser un problema.

dav1dhunt
fuente
1
¿Qué pasa si alguien más creó el repositorio y OP solo se está sincronizando con él?
jww
3

Esto funcionó para mí, combinado de dos respuestas de arriba:

  • $ git rm --cached -f * .DS_Store
  • $ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
  • $ git push origin master --force
JLunceford
fuente
3

Eliminar archivos ignorados:

(.DS_Store)

$ find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
Cubiczx
fuente
2

Hay algunas soluciones para resolver este problema. Para evitar crear archivos .DS_Store, no use OS X Finder para ver carpetas. Una forma alternativa de ver carpetas es usar la línea de comandos de UNIX. Para eliminar los archivos .DS_Store, se puede utilizar un producto de terceros llamado DS_Store Terminator. Para eliminar los archivos .DS_Store de todo el sistema, se puede utilizar un comando de shell UNIX. Iniciar Terminal desde Aplicaciones: Utilidades En el indicador de shell de UNIX, ingrese el siguiente comando UNIX: sudo find / -name ".DS_Store" -depth -exec rm {} \; Cuando se le solicite una contraseña, ingrese la contraseña de administrador de Mac OS X.

Este comando es buscar y eliminar todas las apariciones de .DS_Store comenzando desde la raíz (/) del sistema de archivos a través de toda la máquina. Para configurar este comando para que se ejecute como una tarea programada, siga los pasos a continuación: Inicie la Terminal desde Aplicaciones: Utilidades En el indicador de shell de UNIX ingrese el siguiente comando de UNIX:

sudo crontab -e Cuando se le solicite una contraseña, ingrese la contraseña de administrador de Mac OS X. Una vez en el editor vi, presione la letra I en su teclado una vez e ingrese lo siguiente:

15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;

Esto se llama entrada crontab, que tiene el siguiente formato:

Minuto Hora DayOfMonth Month DayOfWeek Usuario Comando.

La entrada crontab significa que el sistema ejecutará el comando automáticamente a la 1:15 AM todos los días por la cuenta llamada root.

El comando comienza desde encontrar todo el camino hasta. Si el sistema no se está ejecutando, este comando no se ejecutará.

Para guardar la entrada, presione la tecla Esc una vez, luego presione simultáneamente Mayús + z + z.

Nota: La información en el Paso 4 es solo para el editor vi.

vinny
fuente
2

agregue esto a su archivo .gitignore

#Ignore folder mac
.DS_Store

guarda esto y haz commit

git add -A
git commit -m "ignore .DS_Store"

y ahora ignoras esto para todos tus commits

Ezequiel García
fuente
2

crear un .gitignorearchivo usando el comandotouch .gitignore

y agregue las siguientes líneas en él

.DS_Store

guarde el .gitignorearchivo y luego empújelo a su repositorio de git.

2rahulsk
fuente
2

La mejor manera de deshacerse de este archivo para siempre y no tener que preocuparse nunca más es

hacer un archivo global .gitignore:

echo .DS_Store >> ~ / .gitignore_global

Y dígale a git que desea usar este archivo para todos sus repositorios:

git config --global core.excludesfile ~ / .gitignore_global ¡Y eso es todo! .DS_Store está fuera de tu camino.

Kasem007
fuente
1

No es necesario eliminar .DS_STORElocalmente

Solo agrégalo al .gitignorearchivo

El archivo .gitignore es solo un archivo de texto que le dice a Git qué archivos o carpetas debe ignorar en un proyecto.

Comandos

  • nano .gitignore
  • Escribe .DS_StoreLuego haz clicCTRL+X > y > Hit Return
  • git status Para echar un último vistazo a tus cambios
  • git add .gitignore
  • git commit -m 'YOUR COMMIT MESSAGE'
  • git push origin master
Wael Assaf
fuente