2009-08-14 36 views
123

Chương trình của tôi thường tạo ra các tệp đầu ra lớn (~ 1 GB) mà tôi không muốn sao lưu vào kho lưu trữ git. Vì vậy, thay vì có thể làmCó cách nào để yêu cầu git chỉ bao gồm một số tệp nhất định thay vì bỏ qua một số tệp nhất định không?

git add . 

tôi phải làm một cái gì đó giống như

git add *.c *.cc *.f *.F *.C *.h *.cu 

mà là một chút rườm rà ...

tôi cảm thấy khá tự tin tôi có thể viết một perl quicky kịch bản ls nội dung thư mục vào .gitignore và sau đó loại bỏ các tập tin dựa trên một .gitinclude (hoặc một số tên tương tự) tập tin, nhưng điều đó có vẻ hơi quá hackish. Có cách nào tốt hơn?

Trả lời

159

Tôi không cần phải tự mình thử, nhưng từ đọc của tôi TFM có vẻ như một mẫu phủ định sẽ làm những gì bạn muốn. Bạn có thể ghi đè các mục nhập trong .gitignore với các mục nhập bị từ chối sau này. Vì vậy bạn có thể làm điều gì đó như:

*.c 
!frob_*.c 
!custom.c 

Để có nó bỏ qua tất cả các file .c trừ custom.c và bất cứ điều gì bắt đầu bằng "frob_"

+14

Cảm ơn, TED Điều này làm việc. Tất cả những gì tôi phải làm là bắt đầu tệp .gitignore với * và sau đó liệt kê tất cả các mẫu tệp được bao gồm của tôi được tiến hành bằng dấu chấm than. –

+5

Còn thư mục thì sao? Tôi không thể tìm thấy một cách để bao gồm các thư mục và tập tin bên trong bằng cách phủ nhận một quy tắc. –

+1

Giới thiệu về các thư mục, vui lòng kiểm tra http://stackoverflow.com/questions/12799855/configure-git-to-track-only-one-file-extension – uzsolt

58

tạo .gitignore tập tin trong kho lưu trữ của bạn và bạn muốn theo dõi chỉ file c và bỏ qua tất cả các file khác sau đó thêm các dòng sau vào nó ....

* 
!*.c 

'*' sẽ bỏ qua tất cả các file

và! sẽ phủ nhận file được để bỏ qua .... vì vậy ở đây chúng tôi đang yêu cầu git không bỏ qua các file c ....

+0

Bạn cũng cần '. *' cho các tệp ẩn? – trusktr

+1

'*' là một ký tự đại diện ngay cả đối với '.', do đó các tệp ẩn cũng bị bỏ qua, nhưng sau đó tất cả các tệp bị ẩn kết thúc bằng' .c' được bao gồm. – Rohmer

+2

Sử dụng phương pháp này, tôi nghĩ rằng các tệp từ các thư mục con cũng bị bỏ qua. Kiểm tra để biết thêm chi tiết http://stackoverflow.com/a/11853075/739436 – popas

2

Giải pháp tốt nhất để đạt được điều này

tạo .gitignore tập tin trong kho root, và nếu bạn muốn bao gồm chỉ .c tập tin sau đó bạn cần phải thêm bên dưới dòng để .gitignore tập tin

*.* 
!*.c 

này sẽ bao gồm tất cả các tập tin từ thư mục c và thư mục con đệ quy.

sử dụng

* 
!*.c 

sẽ không hoạt động trên tất cả các phiên bản của git.

Thử nghiệm trên

phiên bản git 2.12.2.windows.2

+0

Có tôi đã có cùng một vấn đề với '*', và đã phải sử dụng '*. *'. Đây là trên Windows sử dụng gitbash và git phiên bản 2.9.0.windows.1 –

0

Sử dụng này ở gitignore

*.* 
!*.c 

thử nghiệm với phiên bản 2.7.4 git

Các vấn đề liên quan