2013-09-21 48 views
24

Đây là cấu trúc thư mục của tôi:Git Bỏ qua tất cả mọi thứ trong một thư mục, ngoại trừ các thư mục con

data/ 
    .gitignore 
    uploads/ 
     .gitignore 

tôi xin cam kết các thư mục nhưng không phải các tập tin bên trong chúng.

Vì vậy, tôi thêm một file .gitignore trong mỗi thư mục với các nội dung sau đây:

# Ignore everything in this directory 
* 
# Except this file 
!.gitignore 

Vấn đề là * trận đấu cũng trên danh bạ bài hát để git chỉ data/.gitignore

Trả lời

29

Giải pháp là khá dễ dàng, thêm !*/ vào các tệp .gitignore và chỉ các tệp trong thư mục hiện tại sẽ bị bỏ qua

# Ignore everything in this directory 
* 
# Except this file 
!.gitignore 
# Except folders 
!*/ 
40

Vui lòng không sử dụng sai.gitignore tệp. Tốt hơn là bám vào các cách mặc định để thực hiện điều này, vì vậy các nhà phát triển sau này có thể nhanh chóng tham gia vào dự án của bạn.

  1. Thêm một .gitkeep tập tin trống trong thư mục mà bạn muốn cam kết mà không có file
  2. Loại trừ các thư mục, nhưng không phải là .gitkeep từ chính.gitignore tập tin của bạn.

    folder/* 
    !folder/.gitkeep 
    

này bỏ qua tất cả các file trong một thư mục, nhưng không phải là tập tin .gitkeep. Bây giờ thư mục sẽ chỉ được cam kết với tệp .gitkeep làm nội dung.

+0

lạm dụng gì vậy? Ông có một nhu cầu hoàn toàn hợp pháp, và @ nickel715 đang giải quyết nó độc đáo, với một hack phức tạp tương tự với một trong những bạn đang đề xuất ... – dangonfast

+2

Bởi vì một '.gitignore' nói với mỗi nhà phát triển sau này _that s/ông đã xem xét rằng file_ chỉ để xem không có gì bị bỏ qua. Các tệp '.gitignore' cũng không có nghĩa là được đặt ở bất kỳ thư mục nào so với thư mục chính. Nếu bạn làm như vậy, mọi người sẽ phải xem qua tất cả các thư mục con để xem có điều gì bị bỏ qua không (và tìm ra rằng không có gì bị bỏ qua) để xem những gì thực sự kết thúc trong repo hoặc trong một đường ống triển khai. Đừng thêm sự phức tạp không cần thiết cho các nhà phát triển sau này bởi vì bạn lười biếng và không tuân theo các quy ước. – kaiser

+1

Vẫn bỏ qua các thư mục con. -1 – CommaToast

-4

Hãy thử điều này:

*.* 
!.gitignore 
!*/* 
+0

Điều này không hoạt động đối với các tệp không có dấu chấm trong tên tệp http://pastie.org/10807907 – nickel715

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