2013-07-23 29 views
52

Tôi đã thấy các câu hỏi tương tự (1, 23), nhưng tôi không nhận được giải pháp thích hợp từ chúng.Bỏ qua tất cả các tập tin một cách đệ quy dưới một thư mục cụ thể ngoại trừ một loại tệp cụ thể

Tôi cần bỏ qua tất cả các tệp trong một thư mục cụ thể ngoại trừ một loại tệp cụ thể. Thư mục là thư mục phụ cho đường dẫn gốc. Hãy để tôi đặt tên cho thư mục Resources. Vì tôi không muốn làm phức tạp mọi thứ, hãy để tôi bỏ qua các tệp trong tất cả các thư mục có tên là Resources ở bất cứ đâu.

Đây là giải pháp phổ biến nhất (trong tất cả các câu hỏi trùng lặp)

# Ignore everything 
* 

# Don't ignore directories, so we can recurse into them 
!*/ 

# Don't ignore .gitignore 
!.gitignore 

# Now exclude our type 
!*.foo 

Vấn đề với giải pháp này được rằng nó ngừng theo dõi mới được thêm vào các file (kể từ * bỏ qua tất cả các file). Tôi không muốn tiếp tục loại trừ từng loại tệp. Tôi muốn có hành vi bình thường nếu có bất kỳ tập tin mới nào được thêm vào, git status sẽ hiển thị nó.

Cuối cùng tôi đã nhận được giải pháp here. Giải pháp là thêm một tệp .gitignore khác trong thư mục Resources. Điều này hoạt động chính xác.

Tôi có thể đạt được điều tương tự với một tệp bỏ qua không? Tôi thấy có nhiều tập tin bỏ qua trong các thư mục khác nhau một chút clunky.

Đây là những gì tôi đang cố gắng để đạt được:

# Ignore everything under Resources folder, not elsewhere 
Resources 

# Don't ignore directories, so we can recurse into them 
!*Resources/ 

# Now exclude our type 
!*.foo 

Nhưng điều này sẽ cho kết quả ngược lại. Nó bỏ qua các loại *.foo và theo dõi các tệp khác.

Trả lời

70

@SimonBuchan is correct.

Kể từ git 1.8.2, Resources/** !Resources/**/*.foo công trình.

+1

Điều này làm việc cho tôi, tinh chỉnh nhẹ, tôi chỉ cần loại bỏ các thư mục và mọi thứ bên dưới chúng nên tôi đã làm: 'DirectoryName1/** DirectoryName1/**/*' cho mỗi người trong số họ. xóa tất cả các loại tệp. –

22

Câu trả lời tốt nhất là thêm một Resources/file .gitignore dưới Resources chứa:

# Ignore any file in this directory except for this file and *.foo files 
* 
!/.gitignore 
!*.foo 

Nếu bạn muốn hoặc không thể nói thêm rằng tập tin .gitignore, có một giải pháp thanh nha:

# Ignore any file but *.foo under Resources. Update this if we add deeper directories 
Resources/* 
!Resources/*/ 
!Resources/*.foo 
Resources/*/* 
!Resources/*/*/ 
!Resources/*/*.foo 
Resources/*/*/* 
!Resources/*/*/*/ 
!Resources/*/*/*.foo 
Resources/*/*/*/* 
!Resources/*/*/*/*/ 
!Resources/*/*/*/*.foo 

Bạn sẽ cần chỉnh sửa mẫu đó nếu bạn thêm thư mục sâu hơn chỉ định.

+2

Thats buồn .. Thật vậy, tôi sẽ có các thư mục sâu hơn, vì vậy tôi sẽ gắn bó với thư mục đầu tiên: ( – nawfal

+0

Xem thêm chi tiết về cùng một giải pháp tại đây: http://stackoverflow.com/questions/7803689/gitignore-ignore-all -files-in-folder-hierachy-except-one-specific-filetype - cũng được liên kết ở trên bởi OP @nawfal – here

+30

Vì git 1.8.2, 'Resources/**' '! Resources/**/*. foo' works –

1

Điều này có thể trông ngu ngốc, nhưng hãy kiểm tra xem bạn chưa thêm thư mục/tệp bạn đang cố gắng bỏ qua chỉ mục trước đó chưa. Nếu bạn đã làm, nó không quan trọng những gì bạn đưa vào tập tin .gitignore của bạn, các thư mục/tập tin sẽ vẫn được tổ chức.

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