Ignorieren Sie .pyc-Dateien im Git-Repository

107

Wie kann ich .pycDateien in Git ignorieren ?

Wenn ich es .gitignorehineinlege, funktioniert es nicht. Ich brauche sie, um nicht verfolgt zu werden und nicht auf Commits überprüft zu werden.

Enfix
quelle
4
.gitignore sollte funktionieren. Können Sie eine Kopie der Zeilen bereitstellen, die Sie in .gitignore eingegeben haben, um zu versuchen, dieses Problem zu lösen?
Al Riddoch

Antworten:

41

Steck es rein .gitignore. Aber von der gitignore(5)Manpage:

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

Geben Sie also entweder den vollständigen Pfad zum entsprechenden *.pycEintrag an oder legen Sie ihn in einer .gitignoreDatei in einem der Verzeichnisse ab, die vom Repository-Stamm (einschließlich) führen.

Ignacio Vazquez-Abrams
quelle
6
Um zu vermeiden, dass andere verwirrt werden, ist Ignacios Interpretation der Manpage falsch. Sie müssen die * .pyc nicht im selben Verzeichnis ablegen, es reicht aus, sie in einem übergeordneten Verzeichnis (oder Großeltern usw.) abzulegen.
Godsmith
@ Godsmith: Korrigiert.
Ignacio Vazquez-Abrams
240

Sie sollten eine Zeile hinzufügen mit:

*.pyc 

in die .gitignoreDatei im Stammordner Ihres Git-Repository-Baums direkt nach der Repository-Initialisierung.

Wie ralphtheninja sagte, wenn Sie es vorher vergessen haben, wenn Sie nur die Zeile zur .gitignoreDatei hinzufügen , werden alle zuvor festgeschriebenen .pycDateien weiterhin verfolgt, sodass Sie sie aus dem Repository entfernen müssen.

Wenn Sie sich auf einem Linux-System befinden (oder "Eltern & Söhne" wie ein MacOSX), können Sie dies schnell mit nur diesem einzeiligen Befehl tun, den Sie vom Stammverzeichnis des Repositorys ausführen müssen:

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

Dies bedeutet nur:

Suchen Sie ausgehend von dem Verzeichnis, in dem ich mich gerade befinde, alle Dateien, deren Name mit der Erweiterung endet .pyc, und übergeben Sie den Dateinamen an den Befehlgit rm -f

Nach dem *.pyc Dateien Löschen von git als nachverfolgt Dateien, begehen diese Änderung in das Repository, und dann können Sie endlich die hinzufügen *.pycLeitung zur .gitignoreDatei.

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

Enrico M.
quelle
3
Alternativ können Sie die Dateien auch einfach git rm --cached *.pycaus dem Verzeichnis der obersten Ebene entfernen, um sie von git und von Ihrem lokalen Computer zu entfernen . Habe es von hier bekommen
Anupam
Ich habe es existiert, aber sobald Sie die .pyc-Dateien festschreiben, wird es trotzdem von git verfolgt, sollten Sie sie zuerst löschen und
festschreiben
84

Wahrscheinlich haben Sie sie in das Repository vor der Inbetriebnahme hinzugefügt *.pycin .gitignore.
Entfernen Sie sie zuerst aus dem Repository.

ralphtheninja
quelle
3

Ich versuche, den Satz eines früheren Beitrags zu verwenden und arbeite nicht rekursiv. Dann lese ich etwas Hilfe und erhalte diese Zeile:

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

pd ist erforderlich, um * .pyc in die .gitignore-Datei einzufügen, damit git sauber bleibt

echo "*.pyc" >> .gitignore

Genießen.

Dario Roman Garcia Gonzalez
quelle
0

Danke @Enrico für die Antwort.

Hinweis: Wenn Sie virtualenv verwenden, befinden sich .pycin dem Verzeichnis, in dem Sie sich gerade befinden, mehrere weitere Dateien, die von seinem Befehl find erfasst werden.

Beispielsweise:

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

Ich nehme an, es ist harmlos, alle Dateien zu entfernen, aber wenn Sie nur die .pycDateien in Ihrem Hauptverzeichnis entfernen möchten, tun Sie es einfach

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

Dadurch wird nur die app.pycDatei aus dem Git-Repository entfernt.

Andy G.
quelle