忽略git存储库中的.pyc文件

时间:2011-04-05 11:45:32

标签: python git

如何忽略git中的.pyc个文件?

如果我把它放在.gitignore中,它就不起作用了。我需要它们不被跟踪而不检查提交。

7 个答案:

答案 0 :(得分:178)

您应该添加一行:

*.pyc 
存储库初始化后立即

到git存储库树的根文件夹中的.gitignore文件。

正如 ralphtheninja 所说,如果您事先忘了这么做,如果您只是将行添加到.gitignore文件中,那么所有以前提交的.pyc文件仍将是跟踪,因此您需要将它们从存储库中删除。

如果您使用的是Linux系统(或像MacOSX这样的“父母和儿子”),您可以使用您需要从存储库的根目录执行的这一行命令快速完成此操作:

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

这只是意味着:

  

从我当前所在的目录开始,查找所有文件   名称以扩展名.pyc结尾,并将文件名传递给命令git rm -f

从git中删除*.pyc个文件作为跟踪文件后,将此更改提交到存储库,然后最后将*.pyc行添加到.gitignore文件中。

(改编自http://yuji.wordpress.com/2010/10/29/git-remove-all-pyc/

答案 1 :(得分:71)

在将*.pyc放入.gitignore之前,您可能已将它们添加到存储库中 首先将它们从存储库中删除。

答案 2 :(得分:33)

将其放入.gitignore。但是从gitignore(5)手册页:

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

因此,要么指定相应*.pyc条目的完整路径,要么将其放在.gitignore文件中从存储库根目录(包括)的任何目录中。

答案 3 :(得分:3)

我尝试使用先前文章的句子,并且不递归工作,然后阅读一些帮助并获得以下内容:

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

p.d。必须在.gitignore文件中添加* .pyc以保持git clean

echo "*.pyc" >> .gitignore

享受。

答案 4 :(得分:2)

如果您要全局忽略“ .pyc”文件(即,如果您不想将行添加到每个git目录中的.gitignore文件中),请尝试以下操作:

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

[参考]
https://git-scm.com/docs/gitignore

  • 用户希望Git在所有情况下都忽略的模式(例如,由用户选择的编辑器生成的备份或临时文件)通常进入用户〜/ .gitconfig中由core.excludesFile指定的文件中。

  • 前导“ **”后跟斜杠表示在所有目录中均匹配。例如,“ ** / foo”与文件“ foo”在任何位置都匹配文件或目录“ foo”。 “ ** / foo / bar”与文件或目录“ bar”匹配,直接位于目录“ foo”下。

答案 5 :(得分:0)

感谢@Enrico的回答。

请注意,如果您正在使用virtualenv,那么您目前所在的目录中将会有多个.pyc个文件,这些文件将由他的查找命令捕获。

例如:

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

我认为删除所有文件无害,但如果您只想删除主目录中的.pyc文件,那么只需执行

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

这将从git存储库中删除app.pyc文件。

答案 6 :(得分:0)

如果你在 repo 中提交过,就

  1. 转到文件夹/__pycache__
  2. 将它们全部删除(不用担心,它们是临时文件并且会重复生成)
  3. 有一个新的提交,例如'update gitignore'
  4. 大功告成! .pyc 不会再次出现。