Come posso rimuovere quei fastidiosi .DS_Store
file di Mac OS X da un repository Git?
Come posso rimuovere quei fastidiosi .DS_Store
file di Mac OS X da un repository Git?
Risposte:
Rimuovere i file esistenti dal repository:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Aggiungi la linea
.DS_Store
al file .gitignore
, che può essere trovato al livello superiore del repository (o creato se non è già presente). Puoi farlo facilmente con questo comando nella directory principale
echo .DS_Store >> .gitignore
Poi
git add .gitignore
git commit -m '.DS_Store banished!'
-exec
verrà avviato git-rm
una volta per ogni file .DS_Store, mentre xargs
metterà tutti i percorsi su una riga di comando. Principalmente preferisco xargs
perché non devo preoccuparmi di sfuggire a molti personaggi speciali.
.DS_Store
al .gitignore
lavoro ricorsivamente? Cioè, ignorerà some/level/of/folders/.DS_Store
anche?
Combinando le risposte di benzado e webmat, aggiornando con git rm
, senza errori sui file trovati che non sono in repository, e rendendolo incollabile genericamente per qualsiasi utente:
# 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
~/.gitignore
come mio file di esclusione globale è una seccatura. Ci sono file che voglio escludere dalla mia directory home che non voglio ignorare a livello globale. Uso ~/.gitexcludes
invece tramite la stessa direttiva:core.excludesfile
La migliore soluzione per affrontare questo problema è ignorare globalmente questi file da tutti i repository git sul tuo sistema. Questo può essere fatto creando un file gitignore globale come:
vi ~/.gitignore_global
Aggiunta di regole per ignorare i file come:
# 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
Ora, aggiungi questo file alla tua configurazione globale di git:
git config --global core.excludesfile ~/.gitignore_global
Modificare:
Rimosse le icone in quanto potrebbe essere necessario impegnarle come risorse dell'applicazione.
In alcune situazioni potresti anche voler ignorare alcuni file a livello globale. Per me, .DS_Store è uno di questi. Ecco come:
git config --global core.excludesfile /Users/mat/.gitignore
(O qualsiasi file di tua scelta)
Quindi modificare il file proprio come .gitignore di un repository. Nota che penso che devi usare un percorso assoluto.
Se non riesci a rimuovere i file perché presentano modifiche in fasi, usa:
git rm --cached -f *.DS_Store
Apri il terminale e digita "cd <ProjectPath>"
Rimuovi i file esistenti:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
Aggiungi questo .DS_Store
digitare "ctrl + x"
Digita "y"
Invio per salvare il file
git add .gitignore
git commit -m '.DS_Store removed.'
nano .gitignore
crea il file se non presente, questo comando dovrebbe essere eseguito dalla cartella principale del progetto
La risposta più votata è fantastica, ma aiutando i principianti come me, ecco come creare il file .gitignore, modificarlo, salvarlo, rimuovere i file che potresti aver già aggiunto a Git, quindi inviare il file su Github.
Crea il file .gitignore
Per creare un file .gitignore, è possibile solo touch
il file che crea un file vuoto con il nome specificato. Vogliamo creare il file denominato .gitignore in modo da poter usare il comando:
touch .gitignore
Ignora i file
Ora devi aggiungere la riga che dice a git di ignorare i file di DS Store sul tuo .gitignore. È possibile utilizzare l'editor nano per farlo.
nano .gitignore
Nano è carino perché include le istruzioni su come uscirne. ( Ctrl- Oper salvare, Ctrl- Xper uscire)
Copia e incolla alcune delle idee da questa sintesi di Github che elenca alcuni file comuni da ignorare. I più importanti, per rispondere a questa domanda, sarebbero:
# OS generated files #
######################
.DS_Store
.DS_Store?
I # sono commenti e ti aiuteranno a organizzare il tuo file man mano che cresce.
Questo articolo di Github contiene anche alcune idee e linee guida generali.
Rimuovi i file già aggiunti a git
Infine, devi effettivamente rimuovere quei file di DS Store dalla tua directory.
Usa questo ottimo comando dalla risposta più votata. Questo passerà attraverso tutte le cartelle nella tua directory e rimuoverà quei file da Git.
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Spingi .gitignore fino a Github
Ultimo passaggio, devi effettivamente eseguire il commit del tuo file .gitignore.
git status
git add .gitignore
git commit -m '.DS_Store banished!'
Ho dovuto cambiare git-rm in git rm in sopra per farlo funzionare:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
eliminali usando git-rm
, quindi aggiungi .DS_Store .gitignore
per impedire che vengano aggiunti di nuovo. Puoi anche usare blueharvest per impedire che vengano creati tutti insieme
Nel caso in cui desideri rimuovere i file DS_Store in ogni cartella e sottocartella:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
Ignorali con:
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
Quanto segue ha funzionato meglio per me. Gestito file senza eguali e file con modifiche locali. Per riferimento, questo era su un sistema Mac 10.7 con git 1.7.4.4.
Trova e rimuovi:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f
Inoltre ignoro a livello globale .DS_Store in tutti i repository impostando un core.excludesfile globale.
Innanzitutto, crea il file (se non ne esiste già uno):
touch ~/.gitignore
Quindi aggiungere la seguente riga e salvare:
.DS_Store
Ora configura git per rispettare il file a livello globale:
git config --global core.excludesfile ~/.gitignore
Utilizzare questo comando per rimuovere i file esistenti:
find . -name '*.DS_Store' -type f -delete
Quindi aggiungi .DS_Store
a.gitignore
Ho scoperto che la seguente riga di snipplr fa meglio a cancellare tutto .DS_Store
, incluso uno con modifiche locali.
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cached
opzione, mantiene il tuo locale .DS_Store
poiché verrà comunque riprodotto.
E proprio come menzionato sopra, aggiungi .DS_Store
al file .gitignore sulla radice del tuo progetto. Quindi non sarà più alla tua vista (di pronti contro termine).
Sono un po 'in ritardo alla festa, ma ho una buona risposta. Per rimuovere i file .DS_Store, utilizzare i seguenti comandi da una finestra del terminale, ma fare molta attenzione a eliminare i file con 'trova'. L'uso di un nome specifico con l'opzione -name è uno dei modi più sicuri per usarlo:
cd directory/above/affected/workareas
find . -name .DS_Store -delete
Puoi lasciare "-delete" se vuoi semplicemente elencarli prima e dopo. Questo ti rassicurerà che se ne sono andati.
Per quanto riguarda il consiglio ~ / .gitignore_global: fai attenzione qui. Vuoi mettere quel bel file in .gitignore all'interno del livello più alto di ogni area di lavoro e impegnarlo, in modo che chiunque cloni il tuo repository ne trarrà vantaggio.
Questo funzionerà:
find . -name "*.DS_Store" -type f -exec git-rm {} \;
Elimina tutti i file i cui nomi terminano .DS_Store
, incluso ._.DS_Store
.
"*.DS_Store"
, in modo che l'asterisco venga passato find
anziché espanso dalla shell.
Per qualche motivo nessuno dei precedenti ha funzionato sul mio mac.
La mia soluzione è dal terminale:
rm .DS_Store
Quindi eseguire il comando seguente:
git pull origin master
Questo ha funzionato per me, combo di due risposte dall'alto:
Esistono alcune soluzioni per risolvere questo problema. Per evitare la creazione di file .DS_Store, non utilizzare OS X Finder per visualizzare le cartelle. Un modo alternativo per visualizzare le cartelle è utilizzare la riga di comando UNIX. Per rimuovere i file .DS_Store è possibile utilizzare un prodotto di terze parti chiamato DS_Store Terminator. Per eliminare i file .DS_Store dall'intero sistema è possibile utilizzare un comando shell UNIX. Avvia Terminale da Applicazioni: Utilità Al prompt della shell UNIX, immettere il seguente comando UNIX: sudo find / -name ".DS_Store" -depth -exec rm {} \; Quando viene richiesta una password, immettere la password dell'amministratore di Mac OS X.
Questo comando serve a trovare e rimuovere tutte le occorrenze di .DS_Store a partire dalla radice (/) del file system attraverso l'intero computer. Per configurare questo comando per l'esecuzione come attività pianificata, procedere come segue: Avvia Terminale da Applicazioni: Utilità Al prompt della shell UNIX, immettere il seguente comando UNIX:
sudo crontab -e Quando viene richiesta una password, immettere la password dell'amministratore di Mac OS X. Una volta nell'editor vi, premi una volta la lettera I sulla tastiera e inserisci quanto segue:
15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;
Questo si chiama voce crontab, che ha il seguente formato:
Minuto Ora Giorno Giorno Mese Giorno Giorno Comando utente settimana.
La voce crontab significa che il comando verrà eseguito automaticamente dal sistema ogni giorno all'1: 15 AM dall'account chiamato root.
Il comando inizia da trova fino a. Se il sistema non è in esecuzione, questo comando non verrà eseguito.
Per salvare la voce premere una volta il tasto Esc, quindi premere contemporaneamente Shift + z + z.
Nota: le informazioni nel passaggio 4 sono solo per l'editor vi.
aggiungi questo al tuo file .gitignore
#Ignore folder mac
.DS_Store
salva questo e fai il commit
git add -A
git commit -m "ignore .DS_Store"
e ora lo ignori per tutti i tuoi impegni
Il modo migliore per sbarazzarsi di questo file per sempre e non doversi più preoccupare di questo è
crea un file .gitignore globale:
echo .DS_Store >> ~ / .gitignore_global
E fai sapere a git che vuoi usare questo file per tutti i tuoi repository:
git config --global core.excludesfile ~ / .gitignore_global E questo è tutto! .DS_Store è fuori dai piedi.
Non è necessario rimuovere .DS_STORE
localmente
Aggiungilo al .gitignore
file
Il file .gitignore è solo un file di testo che dice a Git quali file o cartelle ignorare in un progetto.
comandi
nano .gitignore
.DS_Store
quindi fare clic suCTRL+X > y > Hit Return
git status
Per dare un'ultima occhiata alle tue modifichegit add .gitignore
git commit -m 'YOUR COMMIT MESSAGE'
git push origin master