.gitignore loại trừ các tệp trong thư mục nhưng không loại trừ các thư mục nhất định


98
application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*

Điều này dường như không hoạt động. Khi tôi sao chép dự án, không có "application/cache"thư mục hoặc "application/cache/folder"thư mục nào, v.v.

Tôi muốn nếu các tệp trong thư mục bộ nhớ cache không được lưu vào bộ nhớ cache nhưng các thư mục thì có, để các quyền thư mục truyền và tồn tại.

Câu trả lời:


220

Git không theo dõi các thư mục, chỉ theo dõi các tệp, vì vậy nếu bạn bỏ qua mọi thứ trong một thư mục, Git sẽ không có bất kỳ thứ gì để theo dõi. Bạn có thể thêm một .gitignoretập tin cho mỗi thư mục ( application/cache, application/cache/folder, application/cache/folder/onemorefolder/) với nội dung sau:

*
!.gitignore

Sau đó, bạn có thể thêm các thư mục đó và chỉ .gitignoretệp trong mỗi thư mục mới được thêm vào - nhưng điều này có nghĩa là các thư mục sẽ được theo dõi (tức là được tạo khi nhân bản).


7
Các tệp .gitignore được sử dụng cho mục đích này có thể trống.
kevpie

2
Chúng có thể trống, nếu các thư mục bị .gitignoretệp phía trên bỏ qua . Trong trường hợp này, câu trả lời chính xác của tôi.
KingCrunch

4
hợp lý hơn và đơn giản hơn là sử dụng một tệp có tên .gitkeep, sau đó bạn không phải đặt bất kỳ thứ gì trong tệp .gitignore.
Hedgehog,

3
@kevpie Có các tệp khác trong thư mục và anh ấy không muốn chúng bị theo dõi. Nếu tệp .gitignore trống, những tệp đó dường như sẽ được theo dõi.
maliayas

với cùng mục đích, tôi sử dụng .gitkeepthay vì .gitignore. nó có ý nghĩa hơn đối với tôi
Ederson T. Szlachta

22

Git không theo dõi các thư mục trống. Chỉ cần thêm một số tệp giữ chỗ trống trong các thư mục bạn muốn được cam kết.

touch application/cache/.keep
git add -f application/cache/.keep

Cũng làm điều này với mỗi thư mục "trống". Sau này bạn có thể bỏ qua các tệp này, chúng thực sự chỉ tồn tại để đảm bảo rằng git tạo ra các thư mục đó trên bản sao. Các mục nhập trong .gitignoregiữ cho các tệp khác trong các thư mục không bị theo dõi (trừ khi bạn buộc nó với git add -f;)).


16

Có một cách khác có lẽ rõ ràng hơn để làm điều này. Thay vì có các tệp .gitignore con trong các thư mục bạn muốn giữ lại. Bạn có thể đặt cái này trong thư mục gốc .gitignore như sau:

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
!*.gitkeep

Bây giờ chỉ cần tạo và cam kết các tệp .gitkeep trống vào các thư mục như được liệt kê ở trên. Sau đó, thư mục sẽ được theo dõi với các tệp .gitkeep đó nhưng không có nội dung nào được theo dõi.


2
hoặc chỉ !*.gitkeep:)
Ederson T. Szlachta

Câu hỏi đặt ra là làm thế nào để bỏ qua nội dung của các thư mục nhưng vẫn giữ các thư mục đó. Vì vậy, tôi tin rằng câu trả lời của tôi là đúng và chỉ cần có! *. Gitkeep sẽ không bỏ qua nội dung của các thư mục.
Joel Duckworth

3

bạn có thể đặt một tệp .gitignore trong mỗi tệp (như mipadi đã nói) hoặc tạo một cái gì đó tương tự trên tệp .gitingnore gốc của bạn

/assets/*/
/assets/*.*

Việc này ổn với tôi


Điều này hoạt động, nhưng chỉ khi repo đang sử dụng phần mở rộng tệp. Một cái gì đó như root/LICENSE-FILEsẽ không bị loại trừ.
Brett Zamir

2

Visual Studio không thích câu trả lời được chấp nhận. Tôi phải thêm một dòng mới trước dấu * để làm cho nó hoạt động.

# Ignore all files in this folder.
*
!.gitignore
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.