2012-06-18 29 views
26

estoy trabajando en un gran proyecto de python, y estoy realmente enfermo si los archivos .pyc y * ~. Me gustaría eliminarlos. He visto que la bandera -X de git clean eliminaría los archivos sin seguimiento. Como se puede imaginar, no estoy rastreando .pyc ni *~ archivos. Y eso sería el truco. El problema es que tengo un archivo local_settings.py que me gustaría guardar después de limpiar el git.Git: excluir un archivo con git clean

Entonces, esto es lo que tengo.

.gitignore:

*.pyc 
*~ 
local_settings.py 

Cuando ejecuto este comando:

git clean -X -n -e local_settings.py 

consigo esta lista de resultados:

eliminaría local_settings.py
eliminaría los requisitos .txt ~
Quitaría (othe r montón de) ~ archivos
eliminaría (otro grupo de) los archivos pyc

no desea eliminar el archivo local_settings.py. He intentado muchas formas de hacerlo, pero no logro encontrar la manera de hacerlo.

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" 

Y nada parece funcionar.

EDIT:

Para la posteridad, la forma correcta de hacerlo es (Gracias @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

Abrazo del '~ .pyc's, configurar un editor para colocar los archivos temporales de copia de seguridad/en otro directorio (o no en absoluto) y olvidarse de 'git clean'ing. No alimente su OCD – KurzedMetal

+0

¿Ha cometido los * .py's y * ~ ya? –

+0

does 'git update-index --skip-worktree local_settings.py' ayuda? –

Respuesta

13

haga el favor de tratar que con un pequeño x en lugar de la capital. Al igual que - 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) 

De 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

¡Esto es todo! ¡Muchas gracias! – santiagobasulto

0

Si se está utilizando Python 2.6+ acaba de establecer la variable de entorno, PYTHONDONTWRITEBYTECODE , a true. Usted puede añadir lo siguiente a algo así como .profile o .bashrc desactivar por completo para su perfil:

export PYTHONDONTWRITEBYTECODE=true 

O, si lo que desea es hacer eso para un proyecto particular que está trabajando, usted necesita ejecute lo anterior en su shell cada vez (o en uno de sus scripts de inicio virtualenv si está utilizando virtualenv y virtualenvwrapper), o simplemente puede pasar el parámetro -B cuando llame al python, por ejemplo

python -B manage.py runserver 
0

Si ha cometido la década de pyc y así sucesivamente ya, haga lo siguiente:

añadir * .pyc, * ~ y local_settings.py a .gitignore.Entonces hacer en su repositorio git:

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

luego hacer:

git commit -am "get rif of them" 

ahora no debería molestar más

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

obras. Descubrí esto cuando busqué en Google y obtuve this page.

+0

¡Agradable! Gracias. :) Tuve que dejar el '!' En mi caparazón, pero funcionó. – Vimes

1

Pongo los archivos locales que caen en esta categoría en .git/info/exclude (por ejemplo, mis archivos de proyecto IDE). Ellos pueden hacer una limpieza de esta manera:

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

Dónde:

  • demás: muestra los archivos sin seguimiento
  • --exclude-de: proporcionar una norma git ignorar el archivo de estilo excluir de la lista
  • -z/-0: utilizar \ 0 en lugar de \ n para dividir nombres
  • --no-correr-si-vacío: no ejecutar rm si la lista está vacía

Se puede crear un alias, por ejemplo .:

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

El --interactive significa que tiene que hacer git myclean -f para forzar la eliminación.

Referencia: http://git-scm.com/docs/git-ls-files (además de la primera línea de la .git default/info/exclude)

Cuestiones relacionadas