2011-04-05 12 views
50

cómo puedo ignorar el archivo .pyc en git. Si puse .gitignore no funciona: necesito que estén destrabando y no verifique su compromiso.Ignorar archivo .pyc en el repositorio de git

+4

.gitignore debería funcionar. ¿Puede proporcionar una copia de las líneas que ha puesto en .gitignore para intentar resolver este problema? –

Respuesta

27

Ponlo en .gitignore. Pero a partir de la página gitignore(5) hombre:

· If the pattern does not contain a slash /, git treats it as a shell 
     glob pattern and checks for a match against the pathname relative 
     to the location of the .gitignore file (relative to the toplevel of 
     the work tree if not from a .gitignore file). 

    · Otherwise, git treats the pattern as a shell glob suitable for 
     consumption by fnmatch(3) with the FNM_PATHNAME flag: wildcards in 
     the pattern will not match a/in the pathname. For example, 
     "Documentation/*.html" matches "Documentation/git.html" but not 
     "Documentation/ppc/ppc.html" or 
     "tools/perf/Documentation/perf.html". 

Por lo tanto, especificar la ruta completa a la entrada apropiada *.pyc, o ponerlo en un archivo .gitignore en cualquiera de los directorios que va desde la raíz del repositorio (incluido)

+3

Solo para evitar que alguien más se confunda, la interpretación de Ignacio de la página de manual es incorrecta. No necesita colocar el * .pyc en el mismo directorio, es suficiente para ponerlo en un directorio padre (o abuelo, etc.). – Godsmith

+0

@Godsmith: corregido. –

62

Probablemente los hayas agregado al repositorio antes de poner *.pyc en .
Primero retírelos del repositorio.

+26

este gotcha me enciende cada vez – ecoe

115

Usted debe agregar una línea con:

*.pyc 

al archivo .gitignore en la carpeta raíz de su árbol de repositorio git justo después de la inicialización del repositorio.

Como ralphtheninja dijo, si se olvidó de hacerlo de antemano, si usted acaba de añadir la línea en el fichero de .gitignore, todos los cometidos anteriormente .pyc archivos seguirán siendo rastreados, por lo que tendrá que eliminarlos de la repositorio.

Si usted está en un sistema Linux (o "padres & hijos" como un MacOSX), que rápidamente puede hacerlo con sólo este comando una línea que tiene que ejecutar desde la raíz del repositorio:

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

Esto sólo significa:

desde el directorio que estoy actualmente en, encontrar todos los archivos cuyo nombre termina con extensión .pyc, y pasar el nombre de archivo al comando git rm -f

Después *.pyc archivos eliminación de git como archivos rastreados, cometer este cambio en el repositorio, y luego finalmente se puede agregar la línea *.pyc al archivo .gitignore.

(adaptado de http://yuji.wordpress.com/2010/10/29/git-remove-all-pyc/)

+0

Esto es increíble – Tunn

+0

Alternativamente, solo para eliminar los archivos de git y de su máquina local, puede hacer 'git rm --cached * .pyc' en el directorio de nivel superior. Lo obtuve desde [aquí] (https://coderwall.com/p/wrxwog/why-not-to-commit-pyc-files-into-git-and-how-to-fix-if-you-already-did) – Anupam

0

Gracias @Enrico para la respuesta.

Nota si está utilizando virtualenv tendrá varios más archivos .pyc dentro del directorio en el que se encuentra actualmente, que serán capturados por su comando find.

Por ejemplo:

./app.pyc 
./lib/python2.7/_weakrefset.pyc 
./lib/python2.7/abc.pyc 
./lib/python2.7/codecs.pyc 
./lib/python2.7/copy_reg.pyc 
./lib/python2.7/site-packages/alembic/__init__.pyc 
./lib/python2.7/site-packages/alembic/autogenerate/__init__.pyc 
./lib/python2.7/site-packages/alembic/autogenerate/api.pyc 

supongo que es inofensivo para eliminar todos los archivos, pero si sólo desea eliminar los archivos .pyc en su directorio principal, a continuación, sólo hago

find "*.pyc" -exec git rm -f "{}" \;

Esto eliminará solo el archivo app.pyc del repositorio de git.

Cuestiones relacionadas