Ignorer les fichiers .pyc dans le référentiel git

107

Comment puis-je ignorer les .pycfichiers dans git?

Si je le mets, .gitignorecela ne fonctionne pas. J'ai besoin qu'ils ne soient pas suivis et qu'ils ne soient pas vérifiés pour les validations.

enfix
la source
4
.gitignore devrait fonctionner. Pouvez-vous fournir une copie des lignes que vous avez placées dans .gitignore pour tenter de résoudre ce problème?
Al Riddoch

Réponses:

41

Mettez-le dedans .gitignore. Mais à partir de la gitignore(5)page de manuel:

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

Donc, spécifiez le chemin complet de l' *.pycentrée appropriée ou placez-le dans un .gitignorefichier dans l'un des répertoires menant à la racine du référentiel (inclus).

Ignacio Vazquez-Abrams
la source
6
Juste pour éviter que quiconque ne soit confus, l'interprétation par Ignacio de la page de manuel est erronée. Vous n'avez pas besoin de mettre le * .pyc dans le même répertoire, il suffit de le mettre dans un répertoire parent (ou grand-parent, etc.).
Godsmith
@ Godsmith: Corrigé.
Ignacio Vazquez-Abrams
241

Vous devez ajouter une ligne avec:

*.pyc 

dans le .gitignorefichier dans le dossier racine de l'arborescence de votre référentiel git juste après l'initialisation du référentiel.

Comme l'a dit ralphtheninja , si vous avez oublié de le faire au préalable, si vous ajoutez simplement la ligne au .gitignorefichier, tous les .pycfichiers précédemment validés seront toujours suivis, vous devrez donc les supprimer du référentiel.

Si vous êtes sur un système Linux (ou "parents & fils" comme un MacOSX), vous pouvez le faire rapidement avec juste cette commande d'une ligne que vous devez exécuter à partir de la racine du référentiel:

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

Cela signifie simplement:

à partir du répertoire dans lequel je suis actuellement, recherchez tous les fichiers dont le nom se termine par l'extension .pycet transmettez le nom de fichier à la commandegit rm -f

Après la *.pycsuppression des fichiers de git en tant que fichiers suivis, validez cette modification dans le référentiel, puis vous pouvez enfin ajouter la *.pycligne au .gitignorefichier.

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

Enrico M.
la source
3
Alternativement, juste pour supprimer les fichiers de git et de votre machine locale, vous pouvez simplement le faire à git rm --cached *.pycpartir du répertoire de niveau supérieur. Got it from here
Anupam
Je l'ai, mais une fois que vous avez commis les fichiers .pyc, ils sont de toute façon suivis par git, vous devez d'abord les supprimer et les valider au cas où vous les auriez dans le référentiel
Mahmoud Hboubati
84

Vous les avez probablement ajouté au référentiel avant de mettre *.pycen .gitignore.
Supprimez-les d'abord du référentiel.

ralphtheninja
la source
3

J'essaie d'utiliser la phrase d'un article précédent et je ne travaille pas de manière récursive, puis lis de l'aide et obtiens cette ligne:

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

pd est nécessaire pour ajouter * .pyc dans le fichier .gitignore pour maintenir git propre

echo "*.pyc" >> .gitignore

Prendre plaisir.

Dario Roman Garcia Gonzalez
la source
1

Si vous voulez ignorer les fichiers '.pyc' globalement (c'est-à-dire si vous ne voulez pas ajouter la ligne au fichier .gitignore dans chaque répertoire git), essayez ce qui suit:

$ cat ~/.gitconfig 
[core]
    excludesFile = ~/.gitignore
$ cat ~/.gitignore
**/*.pyc

[Référence]
https://git-scm.com/docs/gitignore

  • Les modèles qu'un utilisateur souhaite que Git ignore dans toutes les situations (par exemple, sauvegarde ou fichiers temporaires générés par l'éditeur de son choix) vont généralement dans un fichier spécifié par core.excludesFile dans le fichier ~ / .gitconfig de l'utilisateur.

  • Un "**" en tête suivi d'une barre oblique signifie que tous les répertoires correspondent. Par exemple, "** / foo" correspond au fichier ou au répertoire "foo" n'importe où, de la même manière que le motif "foo". "** / foo / bar" correspond au fichier ou au répertoire "bar" n'importe où qui se trouve directement sous le répertoire "foo".

Tae Kim
la source
0

Merci @Enrico pour la réponse.

Notez que si vous utilisez virtualenv, vous aurez plusieurs .pycfichiers supplémentaires dans le répertoire dans lequel vous vous trouvez actuellement, qui seront capturés par sa commande find.

Par exemple:

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

Je suppose qu'il est inoffensif de supprimer tous les fichiers, mais si vous ne voulez supprimer que les .pycfichiers de votre répertoire principal, faites simplement

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

Cela supprimera juste le app.pyc fichier du référentiel git.

Andy G
la source