git bỏ qua tất cả các tệp thuộc một loại nhất định, ngoại trừ những tệp trong thư mục con cụ thể


192

Tôi có một cấu trúc thư mục như thế này:

  • nguồn gốc
    • thư mục1
      • abc.json
      • def.json
      • một ngày nào đó
        • more.json
    • thư mục2
      • qwe.json
      • rty.json
    • thông số kỹ thuật
      • mock1.json
      • mock2.json
      • một ngày nào đó
        • more_mocks.json

Bây giờ bằng cách sử dụng .gitignoretôi muốn bỏ qua tất cả *.jsoncác tệp ngoại trừ các tệp trong spec. Tôi không muốn sử dụng một .gitignoretrong folder1folder2bởi vì có rất nhiều trong số này và chúng sẽ được thêm vào rất nhiều, và tôi chắc chắn rằng tôi sẽ quên di chuyển đúng .gitignoretệp.

Ngoài ra, có thể có nhiều thư mục lồng nhau hơn với các tệp json và quy tắc này cũng cần phải áp dụng cho tất cả các thư mục con.

Vậy làm thế nào để tôi bỏ qua tất cả các tệp thuộc một loại, ngoại trừ một thư mục con nhất định?

Câu trả lời:


302

Một tiền tố tùy chọn !phủ định mẫu; bất kỳ tệp phù hợp nào được loại trừ bởi một mẫu trước đó sẽ được đưa vào lại. Nếu một mẫu phủ định phù hợp, điều này sẽ ghi đè các nguồn mẫu ưu tiên thấp hơn.

http://schacon.github.com/git/gitignore.html

*.json
!spec/*.json

4
Bạn cũng có thể thêm một .gitignore vào spec có chứa! / *. Json, nếu bạn thích.
David Mitchell

2
Cảm ơn! Mặc dù trong trường hợp của tôi, tôi nhận ra rằng tôi muốn bỏ qua không có gì trong thư mục spec của tôi cả. Vì vậy, tôi có thể đi được với rất đơn giản !spec. Hoạt động như một lá bùa.
Alex Wayne

7
Mặc dù câu trả lời của Amber hoạt động khi spec là một thư mục ở cấp cao nhất (tức là / spec), nhưng nó không hoạt động với tôi khi spec là thư mục con, ví dụ / a / spec hoặc a / b / spec. Sử dụng git 1.7.5.4
Peter Lewis

7
@PeterLewis (dành cho khách truy cập trong tương lai): trường hợp như vậy có thể được xử lý bằng cách tạo tệp .gitignore trong thư mục con có liên quan.
cmbuckley

3
Giải pháp này đối với tôi chỉ bỏ qua các jsontệp spectrực tiếp, không phải là tệp trong somedirthư mục con từ câu hỏi. Tôi cần phải sử dụng !spec/**/*.jsonđể đảm bảo rằng more_mocks.jsoncam kết là tốt.
Leith
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.