Ignorar archivos .pyc en el repositorio de git


107

¿Cómo puedo ignorar .pycarchivos en git?

Si lo pongo .gitignoreno funciona. Necesito que no se les rastree y que no se revisen para confirmaciones.


4
.gitignore debería funcionar. ¿Puede proporcionar una copia de las líneas que ha introducido en .gitignore para intentar solucionar este problema?
Al Riddoch

Respuestas:


41

Ponlo .gitignore. Pero de la gitignore(5)página del manual:

  ·   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, especifique la ruta completa a la *.pycentrada adecuada o colóquela en un .gitignorearchivo en cualquiera de los directorios que van desde la raíz del repositorio (inclusive).


6
Solo para evitar que nadie más se confunda, la interpretación de Ignacio de la página de manual es incorrecta. No es necesario poner el * .pyc en el mismo directorio, basta con ponerlo en un directorio principal (o abuelo, etc.).
Godsmith

@Godsmith: Corregido.
Ignacio Vazquez-Abrams

241

Deberías agregar una línea con:

*.pyc 

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

Como dijo ralphtheninja , si olvidó hacerlo de antemano, si simplemente agrega la línea al .gitignorearchivo, todos los .pycarchivos previamente comprometidos se seguirán rastreando, por lo que deberá eliminarlos del repositorio.

Si está en un sistema Linux (o "padres e hijos" como MacOSX), puede hacerlo rápidamente con solo este comando de una línea que debe ejecutar desde la raíz del repositorio:

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

Esto solo significa:

comenzando desde el directorio en el que estoy actualmente, busque todos los archivos cuyo nombre termine con extensión .pycy pase el nombre del archivo al comandogit rm -f

Después de la *.pyceliminación de archivos de git como archivos rastreados, confirme este cambio en el repositorio y, finalmente, podrá agregar la *.pyclínea al .gitignorearchivo.

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


3
Alternativamente, solo para eliminar los archivos de git y de su máquina local, puede hacerlo git rm --cached *.pycdesde el directorio de nivel superior. Lo tengo desde aquí
Anupam

Tengo que existir, pero una vez que confirma los archivos .pyc, git lo rastrea de todos modos, primero debe eliminarlos y confirmarlos en caso de que los tenga en el repositorio
Mahmoud Hboubati

84

Es probable que los haya añadido al repositorio antes de poner *.pycen .gitignore.
Primero elimínelos del repositorio.


3

Intento usar la oración de una publicación anterior y no trabajo de forma recursiva, luego leo algo de ayuda y obtengo esta línea:

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

pd es necesario agregar * .pyc en el archivo .gitignore para mantener git limpio

echo "*.pyc" >> .gitignore

Disfrutar.


0

Gracias @Enrico por la respuesta.

Tenga en cuenta que si está utilizando virtualenv, tendrá varios .pycarchivos más dentro del directorio en el que se encuentra actualmente, que serán capturados por su comando de búsqueda.

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 eliminar todos los archivos, pero si solo desea eliminar los .pycarchivos de su directorio principal, hágalo

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

Esto eliminará solo el app.pycarchivo del repositorio de git.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.