¿Cómo puedo eliminar esos molestos files Mac OS X .DS_Store
de un repository de Git?
Eliminar files existentes del repository:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Agrega la linea
.DS_Store
al file .gitignore
, que se puede encontrar en el nivel superior de su repository (o creado si ya no está allí). Entonces
git add .gitignore git commit -m '.DS_Store banished!'
Combinando las respuestas de benzado y webmat, actualizando con git rm
, no fallando en los files encontrados que no están en repository, y haciéndolo compatible de forma genérica 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
La mejor solución para abordar este problema es ignorar globalmente estos files de todos los repositorys git en su sistema. Esto se puede hacer creando un file global de gitignore como:
vi ~/.gitignore_global
Agregar reglas para ignorar files 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 file a su configuration global de git:
git config --global core.excludesfile ~/.gitignore_global
Editar:
Se eliminaron los íconos, ya que es posible que deban comprometerse como activos de la aplicación.
En algunas situaciones, es posible que también desee ignorar algunos files de forma global. Para mí, .DS_Store es uno de ellos. Así es cómo:
git config --global core.excludesfile /Users/mat/.gitignore
(O cualquier file de su elección)
Luego edite el file como un .gitignore de un repository. Tenga en count que creo que debe usar una ruta absoluta.
Tuve que cambiar de git-rm a git rm en el anterior para que funcione:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
elimínelos usando git-rm
, y luego agregue .DS_Store a .gitignore
para evitar que se vuelvan a agregar. También puedes usar blueharvest para evitar que se creen todos juntos
Si no puede eliminar los files porque tienen cambios por etapas, use:
git rm --cached -f *.DS_Store
Abra el terminal y escriba "cd <ProjectPath>"
Eliminar files existentes: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
Agrega esto .DS_Store
escribe "ctrl + x"
Escribe "y"
Ingresa para save el file
git add .gitignore
git commit -m '.DS_Store removed.'
Lo siguiente funcionó mejor para mí. Manejo de files sin igual y files con modificaciones locales. Como reference, esto fue en un sistema Mac 10.7 ejecutando 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 repositorys estableciendo un core.excludesfile global.
Primero, crea el file (si aún no existe uno):
touch ~/.gitignore
A continuación, agregue la siguiente línea y guárdelo:
.DS_Store
Ahora configure git para respetar el file globalmente:
git config --global core.excludesfile ~/.gitignore
Descubrí que la siguiente línea de snipplr funciona mejor al borrar todo .DS_Store, incluido uno que tiene modificaciones locales.
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
– opción de caching, mantiene su .DS_Store local, ya que se reproducirá de todos modos.
Y tal como se mencionó anteriormente, agregue el file .DS_Store a .gitignore en la raíz de su proyecto. Entonces ya no estará a su vista (de repos).
Use este command para eliminar los files existentes:
find . -name '*.DS_Store' -type f -delete
A continuación, agregue .DS_Store
a .gitignore
La mejor respuesta es excelente, pero ayudando a los novatos como yo, aquí se explica cómo crear el file .gitignore, editarlo, savelo, eliminar los files que ya hayas agregado a git, y luego upload el file a Github.
Crea el file .gitignore
Para crear un file .gitignore, puede touch
el file que crea un file en blanco con el nombre especificado. Queremos crear el file llamado .gitignore para que podamos usar el command:
touch .gitignore
Ignora los files
Ahora tiene que agregar la línea que le dice a git que ignore los files de DS Store en su .gitignore. Puede usar el editor nano para hacer esto.
nano .gitignore
Nano es bueno porque incluye instrucciones sobre cómo salir de él. ( Ctrl – O para save, Ctrl – X para salir)
Copie y pegue algunas de las ideas de este Github gist que enumera algunos files comunes para ignorar. Los más importantes, para responder esta pregunta, serían:
# OS generated files # ###################### .DS_Store .DS_Store?
Los # son comentarios y te ayudarán a organizar tu file a medida que vaya creciendo.
Este artículo de Github también tiene algunas ideas y pautas generales.
Eliminar los files ya agregados a git
Finalmente, debe eliminar esos files de DS Store de su directory.
Use este gran command de la respuesta más votado. Esto pasará por todas las carpetas de su directory y eliminará esos files de git.
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Empujar .gitignore hasta Github
El último paso, necesitas comprometer tu file .gitignore.
git status
git add .gitignore
git commit -m '.DS_Store banished!'
Esto funcionará:
find . -name *.DS_Store -type f -exec git-rm {} \;
Hay algunas soluciones para resolver este problema. Para evitar crear files .DS_Store, no use el buscador de OS X para ver carpetas. Una forma alternativa de ver carpetas es usar la command-line de UNIX. Para eliminar los files .DS_Store se puede usar un producto de terceros llamado DS_Store Terminator. Para eliminar los files .DS_Store de todo el sistema, se puede usar un command de shell de UNIX. Iniciar Terminal desde Aplicaciones: Utilidades En el indicador de shell de UNIX, ingrese el siguiente command de 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 command es para search y eliminar todas las ocurrencias de .DS_Store a partir de la raíz (/) del sistema de files a través de toda la máquina. Para configurar este command para que se ejecute como una tarea progtwigda, siga los pasos a continuación: Inicie el Terminal desde Aplicaciones: Utilidades En el indicador de shell UNIX ingrese el siguiente command 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 keyboard una vez e ingrese lo siguiente:
15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;
Esto se denomina input crontab, que tiene el siguiente formatting:
Hora de minuto Día de mes de mes Orden de usuario de día de semana.
La input crontab significa que el command será ejecutado por el sistema automáticamente a la 1:15 a.m. todos los días por la count llamada raíz.
El command comienza desde encontrar todo el path hasta. Si el sistema no se está ejecutando, este command no se ejecutará.
Para save la input, presione la tecla Esc una vez, luego presione Shift + z + z simultáneamente.
Nota: La información en el Paso 4 es solo para el editor vi.
Por alguna razón, ninguno de los anteriores funcionó en mi mac.
Mi solución es de terminal run
rm .DS_Store
Entonces
git pull origin master
Al inicializar su repository, omita el command git que contiene
-u
y no debería ser un problema.
Esto funcionó para mí, combinado de dos respuestas de arriba:
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store" $ git push origin master --force
agregue esto a su file .gitignore
#Ignore folder mac .DS_Store
save esto y hacer commit
git add -A git commit -m "ignore .DS_Store"
y ahora ignoras esto para todos tus commits