2011-04-05 140 views
50

我該如何忽略git中的.pyc文件。 如果我放入.gitignore不起作用:我需要他們不追蹤,不檢查它的提交。忽略git倉庫中的.pyc文件

+4

.gitignore應該工作。你能否提供你在.gitignore中放入的行的副本來嘗試解決這個問題? – 2011-04-05 11:47:46

回答

27

把它放在.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

爲了避免讓其他人感到困惑,Ignacio對手冊頁的解釋是錯誤的。您不需要將* .pyc放在同一個目錄中,只需將它放在父目錄(或祖父母等)中即可。 – Godsmith 2015-06-02 08:21:22

+0

@Godsmith:更正。 – 2015-06-02 08:23:22

62

在將*.pyc放入.gitignore之前,您可能已將其添加到存儲庫。
首先將它們從存儲庫中刪除。庫初始化之後

*.pyc 

.gitignore文件在你的git倉庫樹的根文件夾:

+26

這個問題每次都會讓我知道 – ecoe 2013-10-13 18:54:12

115

你應該加一行。

由於ralphtheninja說,如果你忘了做這一點,事前,如果你只需要添加行至.gitignore文件,所有以前犯.pyc文件仍將被跟蹤,所以你需要從刪除庫。

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

如果你是一個Linux系統(或「父母&兒子」像MacOSX的),你可以快速地與眼前這個,你需要從庫的根執行一個命令行的做

這也就意味着:

從我目前的目錄開始,查找其 名與擴展.pyc結束的所有文件,並通過文件名的命令git rm -f

後從混帳作爲跟蹤文件*.pyc文件刪除,提交此變更到倉庫,然後你就可以在*.pyc行最後添加到.gitignore文件。

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

+0

這真是太棒了 – Tunn 2017-12-18 23:52:58

+0

另外,只需從git和本地機器上刪除文件,就可以從頂層目錄執行'git rm --cached * .pyc'。從[這裏]得到它(https://coderwall.com/p/wrxwog/why-not-to-commit-pyc-files-into-git-and-how-to-fix-if-you-already-did ) – Anupam 2017-12-28 05:42:58

0

感謝@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文件。