Ignorar arquivos .pyc no repositório git


107

Como posso ignorar .pycarquivos no git?

Se eu colocar, .gitignorenão funciona. Eu preciso que eles não sejam rastreados e não sejam verificados quanto a commits.


4
.gitignore deve funcionar. Você pode fornecer uma cópia das linhas que colocou em .gitignore para tentar resolver este problema?
— Al Riddoch,

Respostas:


41

Coloque .gitignore. Mas na gitignore(5)página do 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".

Portanto, especifique o caminho completo para a *.pycentrada apropriada ou coloque-o em um .gitignorearquivo em qualquer um dos diretórios que conduzem da raiz do repositório (inclusive).


6
Apenas para evitar que mais alguém se confunda, a interpretação de Ignacio da página do manual está errada. Não é necessário colocar o * .pyc no mesmo diretório, basta colocá-lo em um diretório pai (ou avô, etc).
— Godsmith

@Godsmith: corrigido.
— Ignacio Vazquez-Abrams

241

Você deve adicionar uma linha com:

*.pyc 

para o .gitignorearquivo na pasta raiz de sua árvore de repositório git logo após a inicialização do repositório.

Como disse o ralphtheninja , se você esqueceu de fazer isso antes, se você apenas adicionar a linha ao .gitignorearquivo, todos os .pycarquivos previamente confirmados ainda serão rastreados, então você precisará removê-los do repositório.

Se você estiver em um sistema Linux (ou "pais e filhos" como um MacOSX), você pode fazer isso rapidamente com apenas este comando de uma linha que você precisa executar a partir da raiz do repositório:

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

Isso significa apenas:

começando do diretório em que estou atualmente, encontre todos os arquivos cujo nome termina com extensão .pyce passe o nome do arquivo para o comandogit rm -f

Após a *.pycexclusão dos arquivos do git como arquivos rastreados, envie essa alteração para o repositório e, então, você pode finalmente adicionar a *.pyclinha ao .gitignorearquivo.

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


3
Alternativamente, apenas para remover os arquivos do git e de sua máquina local, você pode fazer a git rm --cached *.pycpartir do diretório de nível superior. Compreendi daqui
— Anupam

Eu sei que ele existe, mas depois que você confirma os arquivos .pyc, eles são rastreados pelo git de qualquer maneira, você deve excluí-los primeiro e confirmá-los caso os tenha no repositório
— Mahmoud Hboubati

84

Você provavelmente já adicionou-los para o repositório antes de colocar *.pycno .gitignore.
Primeiro remova-os do repositório.


3

Eu tento usar a frase de um post anterior e não trabalho recursivamente, então leio alguma ajuda e obtenho esta linha:

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

pd é necessário adicionar * .pyc no arquivo .gitignore para manter o git limpo

echo "*.pyc" >> .gitignore

Aproveitar.


0

Obrigado @Enrico pela resposta.

Observe que, se estiver usando o virtualenv, você terá vários outros .pycarquivos no diretório em que está atualmente, que serão capturados pelo comando find.

Por exemplo:

./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

Suponho que seja inofensivo remover todos os arquivos, mas se você só deseja remover os .pycarquivos do seu diretório principal, basta fazer

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

Isso removerá apenas o app.pycarquivo do repositório git.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.