Khi bạn nói với nó để bỏ qua *
, Git sẽ không recurse vào bất kỳ thư mục con (ngay cả khi bạn có một “unignore” mô hình mà có thể phù hợp với một cái gì đó bên một trong những thư mục).
Có một chút ngôn ngữ mẫu gitignore có thể trợ giúp. Dấu gạch chéo theo sau buộc buộc mẫu chỉ áp dụng cho các thư mục. Vì vậy, bạn sẽ có thể sử dụng điều này:
# .gitignore
*
!.keep
!*/
Trong các cuộc biểu tình dưới đây tôi sử dụng trên .gitignore
và có một tập tin bổ sung (tên do-not-keep
) bên cạnh mỗi tập tin .keep
. Bạn có thể thấy rằng nó hoạt động cho nhiều cấp độ của thư mục con và không hiển thị các tệp khác. Bạn sẽ phải sắp xếp cho mỗi thư mục có .keep
riêng (hoặc bất kỳ) nào thông qua một số phương pháp độc lập.
% git status --short -uall
?? a/.keep
?? a/b/.keep
?? a/b/c/.keep
?? a/b/c/d/.keep
?? e/.keep
?? e/f/.keep
?? e/f/g/.keep
?? h/.keep
?? h/i/.keep
?? j/.keep
Điều này được thực hiện với Git 1.7.3.1, nhưng tôi hy vọng nó cũng sẽ hoạt động với các phiên bản khác.
Quá trình cài đặt diễn:
% git init
% mkdir -p a/b/c/d e/f/g h/i j
% zargs -i.. -- **/*(/) -- touch ../.keep ../do-not-keep
% tree -aI .git .
.
|-- .gitignore
|-- a
| |-- .keep
| |-- b
| | |-- .keep
| | |-- c
| | | |-- .keep
| | | |-- d
| | | | |-- .keep
| | | | `-- do-not-keep
| | | `-- do-not-keep
| | `-- do-not-keep
| `-- do-not-keep
|-- e
| |-- .keep
| |-- do-not-keep
| `-- f
| |-- .keep
| |-- do-not-keep
| `-- g
| |-- .keep
| `-- do-not-keep
|-- h
| |-- .keep
| |-- do-not-keep
| `-- i
| |-- .keep
| `-- do-not-keep
`-- j
|-- .keep
`-- do-not-keep
10 directories, 21 files
Nguồn
2010-10-06 23:16:25
Đừng bạn cũng cần phải có '.gitignore' liệt kê trong riêng file' .gitignore' tiểu dir của để cho bỏ qua tập tin riêng của mình để được theo dõi bởi git? – beporter
@beporter: Tôi thường sẽ tự theo dõi nó bằng 'git add -f .gitignore' (khi nó được theo dõi, nó không quan trọng cho dù nó có bị bỏ qua hay không). Nhưng, nếu bạn không muốn thực hiện bước "force" một lần đó, thì bạn có thể thêm mục nhập bổ sung đó (hoặc, có thể tốt hơn, '! /. Gitignore' để chỉ unignore' .gitignore' cấp đầu tiên). –