2012-06-18 15 views
26

Sto lavorando su un grande progetto Python, e sono davvero malato se .pyc e * ~ file. Mi piacerebbe rimuoverli. Ho visto che il flag -X di git clean rimuoveva i file non tracciati. Come puoi immaginare, non sto monitorando i file .pyc*~. E quello farebbe il trucco. Il problema è che ho un file local_settings.py che vorrei mantenere dopo il git clean.Git: Escludi un file con git clean

Quindi, questo è quello che ho.

.gitignore:

*.pyc 
*~ 
local_settings.py 

Quando eseguire questo comando:

git clean -X -n -e local_settings.py 

ho questa lista di risultati:

eliminerebbe local_settings.py
eliminerebbe requisiti .txt ~
Rimuovere (othe R mucchio di) ~ file
eliminerebbe (altro gruppo di) file pyc

io non voglio rimuovere il file local_settings.py. Ho provato un sacco di modi per farlo, ma non riesco a capire come realizzarlo.

git clean -X -n -e local_settings.py 
git clean -X -n -e "local_settings.py" 
git clean -X -n --exclude=local_settings.py 
git clean -X -n --exclude="local_settings.py" 

E niente sembra funzionare.

EDIT:

Ai posteri, il modo giusto per farlo è (Grazie @Rifat):

git clean -x -n -e local_settings.py # Shows what would remove (-n flag) 
git clean -x -f -e local_settings.py # Removes it (note the -f flag) 
+2

Abbracciare il '~ .pyc's, configurare l'editor per inserire i file temporanei/backup in un'altra directory (o non a tutti) e dimenticare 'git clean'ing. Non alimentare il tuo OCD – KurzedMetal

+0

Ti sei già impegnato con * .pyc e * ~? –

+0

fa 'git update-index --skip-worktree local_settings.py' aiuta? –

risposta

13

Per favore, provare che con piccolo x invece di quella capitale. Come - git clean -x

git clean -x -n -e local_settings.py # Shows what would remove (-n flag) 
git clean -x -f -e local_settings.py # Removes it (note the -f flag) 

Da the git documentation:

-x 
     Don't use the standard ignore rules read from .gitignore (per 
     directory) and $GIT_DIR/info/exclude, but do still use the ignore 
     rules given with -e options. This allows removing all untracked 
     files, including build products. This can be used (possibly in 
     conjunction with git reset) to create a pristine working directory 
     to test a clean build. 

    -X 
     Remove only files ignored by git. This may be useful to rebuild 
     everything from scratch, but keep manually created files. 
+0

Questo è tutto! Grazie mille! – santiagobasulto

0

Se stai usando Python 2.6 + è sufficiente impostare la variabile d'ambiente, PYTHONDONTWRITEBYTECODE , a true. Si può solo aggiungere il seguente a qualcosa come .profile o .bashrc disabilitarlo del tutto per il tuo profilo:

export PYTHONDONTWRITEBYTECODE=true 

Oppure, se si desidera solo di farlo per un particolare progetto si sta lavorando, è necessario esegui quanto sopra nella tua shell ogni volta (o in uno dei tuoi script di init virtualenv se stai usando virtualenv e virtualenvwrapper), oppure puoi semplicemente passare il parametro -B quando chiami python, ad es.

python -B manage.py runserver 
0

Se avete commesso i pyc di e così via già, effettuare le seguenti operazioni:

Add * .pyc, * ~ e local_settings.py al .gitignore. Poi fate nella vostra repository git:

find . -name '*.pyc' | xargs rm 
find . -name '*~' | xargs rm 

poi fare:

git commit -am "get rif of them" 

ora non dovrebbe preoccuparsi di voi più

8
git clean -X -n --exclude="!local_settings.py" 

opere. L'ho scoperto quando ho cercato su Google e ho ottenuto this page.

+0

Bello! Grazie. :) Ho dovuto lasciare il '!' Nel mio guscio, ma ha funzionato. – Vimes

1

Inserisco file locali che rientrano in questa categoria in .git/info/exclude (ad esempio i miei file di progetto IDE). Essi si può fare una pulizia in questo modo:

git ls-files --others --exclude-from=.git/info/exclude -z | \ 
    xargs -0 --no-run-if-empty rm --verbose 

Dove:

  • others: mostra i file non monitorate
  • --exclude-da: fornire una git standard di ignorare file di stile da escludere dalla l'elenco
  • z/-0: utilizzare \ 0 invece di \ n di dividere i nomi
  • --no-run-se-vuoto: non eseguire rm se la lista è vuota

Si potrebbe creare un alias, ad es .:

git config --global alias.myclean '!git ls-files --others --exclude-from=.git/info/exclude -z | xargs -0 --no-run-if-empty rm --verbose --interactive' 

Il --interactive significa che dovete fare git myclean -f per forzare l'eliminazione.

Riferimento: http://git-scm.com/docs/git-ls-files (più la prima linea di default .git/info/escludere)