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.

enfix
fuente
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).

Ignacio Vázquez-Abrams
fuente
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/ )

Enrico M.
fuente
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.

ralphtheninja
fuente
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.

Darío Román García González
fuente
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.

Andy G
fuente