Bỏ qua các tệp .pyc trong kho lưu trữ git


107

Làm cách nào để tôi có thể bỏ qua .pyccác tệp trong git?

Nếu tôi đặt nó vào .gitignorenó không hoạt động. Tôi cần chúng không được theo dõi và không được kiểm tra các cam kết.


4
.gitignore nên hoạt động. Bạn có thể cung cấp bản sao của những dòng bạn đã nhập .gitignore để giải quyết vấn đề này không?
Al Riddoch

Câu trả lời:


41

Đặt nó vào .gitignore. Nhưng từ gitignore(5)trang người đàn ông:

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

Vì vậy, hãy chỉ định đường dẫn đầy đủ đến *.pycmục nhập thích hợp hoặc đặt nó vào một .gitignoretệp trong bất kỳ thư mục nào dẫn từ gốc kho lưu trữ (bao gồm).


6
Chỉ để tránh bất kỳ ai khác nhầm lẫn, cách giải thích của Ignacio về trang người đàn ông là sai. Bạn không cần đặt * .pyc trong cùng một thư mục, chỉ cần đặt nó trong thư mục mẹ (hoặc grandparent, v.v.) là đủ.
Thần thợ rèn

@Godsmith: Đã sửa.
Ignacio Vazquez-Abrams

241

Bạn nên thêm một dòng với:

*.pyc 

vào .gitignoretệp trong thư mục gốc của cây kho lưu trữ git của bạn ngay sau khi khởi tạo kho lưu trữ.

Như ralphtheninja đã nói, nếu bạn quên làm điều đó trước đó, nếu bạn chỉ thêm dòng vào .gitignoretệp, tất cả các .pyctệp đã cam kết trước đó sẽ vẫn được theo dõi, vì vậy bạn sẽ cần xóa chúng khỏi kho lưu trữ.

Nếu bạn đang sử dụng hệ thống Linux (hoặc "cha mẹ và con trai" như MacOSX), bạn có thể nhanh chóng thực hiện điều đó chỉ với một dòng lệnh mà bạn cần thực thi từ thư mục gốc của kho lưu trữ:

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

Điều này chỉ có nghĩa là:

bắt đầu từ thư mục mà tôi hiện đang ở, tìm tất cả các tệp có tên kết thúc bằng phần mở rộng .pycvà chuyển tên tệp vào lệnhgit rm -f

Sau khi *.pycxóa tệp khỏi git dưới dạng tệp được theo dõi, hãy cam kết thay đổi này vào kho lưu trữ và cuối cùng bạn có thể thêm *.pycdòng vào .gitignoretệp.

(phỏng theo http://yuji.wordpress.com/2010/10/29/git-remove-all-pyc/ )


3
Ngoài ra, chỉ để xóa các tệp khỏi git và khỏi máy cục bộ của bạn, bạn chỉ có thể thực hiện git rm --cached *.pyctừ thư mục cấp cao nhất. Nhận được nó từ đây
Anupam

Tôi có nó tồn tại nhưng một khi bạn cam kết các tập tin pyc nó được theo dõi bởi git dù sao, bạn nên xóa chúng đầu tiên và cam kết trong trường hợp bạn có chúng trong kho
Mahmoud Hboubati

84

Bạn có thể đã thêm chúng vào kho lưu trữ trước khi đưa *.pycvào .gitignore.
Đầu tiên hãy xóa chúng khỏi kho lưu trữ.


3

tôi cố gắng sử dụng câu của một bài viết trước và không làm việc đệ quy, sau đó đọc một số trợ giúp và nhận được dòng này:

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

pd là cần thiết để thêm * .pyc trong tệp .gitignore để duy trì git sạch

echo "*.pyc" >> .gitignore

Thưởng thức.


0

Cảm ơn @Enrico vì câu trả lời.

Lưu ý nếu bạn đang sử dụng virtualenv, bạn sẽ có thêm một số .pyctệp trong thư mục mà bạn hiện đang ở, các tệp này sẽ được ghi lại bằng lệnh tìm của anh ấy.

Ví dụ:

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

Tôi cho rằng việc xóa tất cả các tệp là vô hại, nhưng nếu bạn chỉ muốn xóa các .pyctệp trong thư mục chính của mình, thì chỉ cần làm

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

Thao tác này sẽ chỉ xóa app.pyctệp khỏi kho lưu trữ git.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.