Ignora i file .pyc nel repository git


107

Come posso ignorare i .pycfile in git?

Se lo metto dentro .gitignorenon funziona. Ho bisogno che non vengano tracciati e non siano controllati i commit.


4
.gitignore dovrebbe funzionare. Puoi fornire una copia delle righe che hai inserito in .gitignore per tentare di risolvere questo problema?
Al Riddoch

Risposte:


41

Mettilo dentro .gitignore. Ma dalla gitignore(5)pagina man:

  ·   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".

Quindi, specificare il percorso completo della *.pycvoce appropriata o inserirla in un .gitignorefile in una qualsiasi delle directory che provengono dalla radice del repository (inclusa).


6
Solo per evitare che qualcun altro si confonda, l'interpretazione di Ignacio della pagina di manuale è sbagliata. Non è necessario mettere il * .pyc nella stessa directory, è sufficiente metterlo in una directory padre (o nonno, ecc.).
Godsmith

@Godsmith: corretto.
Ignacio Vazquez-Abrams

241

Dovresti aggiungere una riga con:

*.pyc 

al .gitignorefile nella cartella principale dell'albero del repository git subito dopo l'inizializzazione del repository.

Come ha detto ralphtheninja , se ti sei dimenticato di farlo in anticipo, se aggiungi semplicemente la riga al .gitignorefile, tutti i file precedentemente .pycsalvati verranno comunque tracciati, quindi dovrai rimuoverli dal repository.

Se sei su un sistema Linux (o "genitori e figli" come un MacOSX), puoi farlo rapidamente con solo questo comando di una riga che devi eseguire dalla radice del repository:

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

Questo significa solo:

a partire dalla directory in cui mi trovo attualmente, trova tutti i file il cui nome termina con l'estensione .pyce passa il nome del file al comandogit rm -f

Dopo l' *.pyceliminazione dei file da git come file tracciati, salva questa modifica nel repository, quindi puoi finalmente aggiungere la *.pycriga al .gitignorefile.

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


3
In alternativa, solo per rimuovere i file da git e dalla tua macchina locale, puoi semplicemente farlo git rm --cached *.pycdalla directory di primo livello. Capito da qui
Anupam

Ce l'ho, ma una volta che effettui il commit dei file .pyc viene comunque tracciato da git, dovresti prima eliminarli e eseguire il commit nel caso in cui li avessi nel repository
Mahmoud Hboubati

84

Hai probabilmente li aggiunto al repository prima di mettere *.pycin .gitignore.
Prima rimuovili dal repository.


3

cerco di usare la frase di un post precedente e non lavoro in modo ricorsivo, quindi leggo un po 'di aiuto e ottengo questa riga:

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

pd è necessario per aggiungere * .pyc nel file .gitignore per mantenere git pulito

echo "*.pyc" >> .gitignore

Godere.


0

Grazie @Enrico per la risposta.

Nota se stai usando virtualenv avrai molti più .pycfile all'interno della directory in cui ti trovi attualmente, che saranno catturati dal suo comando find.

Per esempio:

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

Suppongo che sia innocuo rimuovere tutti i file, ma se vuoi solo rimuovere i .pycfile nella tua directory principale, allora fallo

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

Questo rimuoverà solo il app.pycfile dal repository git.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.