忽略git仓库中的.pyc文件

我怎么能忽略文件.pyc在混帐。 如果我把.gitignore不工作:我需要他们是不追踪,不检查它的提交。

把它放在.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条目的完整path,要么将其放在一个.gitignore文件中的任何一个从根目录(包含)开始的目录中。

你应该添加一行:

 *.pyc 

到版本库初始化后,git存储库树的根文件夹中的.gitignore文件。

正如ralphtheninja所说,如果你之前忘了这么做的话,如果你只是把这行添加到.gitignore文件中,所有以前提交的.pyc文件都将被跟踪,所以你需要将它们从版本库中删除。

如果你在一个Linux系统上(或者像MacOSX那样的“父母与子女”),你可以使用这个只需要从存储库根目录执行的命令来快速完成它:

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

这只是意味着:

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

*.pyc文件从git中作为被跟踪文件删除后,将这个改变提交到版本库,然后你可以最后把*.pyc行添加到.gitignore文件中。

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

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

感谢@Enrico的答案。

请注意,如果您使用的是virtualenv,您将在当前目录中的多个.pyc文件中被find命令捕获。

例如:

 ./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文件。