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.

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

Ignacio Vazquez-Abrams
fonte
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/ )

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

Ralphtheninja
fonte
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.

Dario Roman Garcia Gonzalez
fonte
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.

Andy G
fonte