Tôi đang cố gắng hiểu rõ ràng hơn về .gitignore
cú pháp, và cụ thể là liên quan đến https://github.com/github/gitignore gitignores.
Tôi thấy rằng dấu gạch chéo ở đầu chỉ được sử dụng để đối sánh tên đường dẫn liên quan đến vị trí của .gitignore
tệp (từ http://git-scm.com/docs/gitignore ):
Dấu gạch chéo ở đầu khớp với phần đầu của tên đường dẫn. Ví dụ: "/*.c" khớp với "cat-file.c" nhưng không khớp với "mozilla-sha1 / sha1.c".
Nhưng điều gì sẽ xảy ra khi tôi xóa dấu gạch chéo đầu tiên? Theo như những gì tôi hiểu, có hai trường hợp:
- Nếu mẫu không chứa dấu gạch chéo (hoặc chỉ chứa dấu gạch chéo ở cuối, có nghĩa là nó phải khớp với một thư mục), thì tìm kiếm được thực hiện bên trong toàn bộ cây thư mục. Ví dụ, mô hình
dir/
sẽ phù hợp<root>/dir
,<root>/a/dir
,<root>/a/b/c/.../dir
vv, nơi<root>
là vị trí của các.gitignore
tập tin. - Nếu mẫu có dấu gạch chéo, không ở vị trí cuối (không phải là ký tự cuối cùng), thì nó chỉ được khớp với tên đường dẫn liên quan đến
.gitignore
vị trí tệp.
Đây là những ví dụ tôi đã thực hiện để kiểm tra hành vi này:
# Directory structure:
<root>
├─ dir/
│ └─ test
├─ src/
│ ├─ dir/
│ │ └─ test
test file is there only because Git does not track empty directories.
Thử nghiệm đầu tiên:
# .gitignore
dir/
# git status
nothing to commit
Vì vậy, Git đang bỏ qua cả hai dir
thư mục. Điều này phù hợp với trường hợp số 1: mẫu không có dấu gạch chéo (ngoại trừ dấu gạch chéo), vì vậy Git đang xem toàn bộ cây thư mục, bỏ qua mọi thứ phù hợp với mẫu.
Thử nghiệm thứ hai:
# .gitignore
/dir/
# git status
Untracked files:
src/
Ở đây, Git chỉ bỏ qua dir
thư mục trực tiếp bên dưới thư mục gốc, nhờ dấu gạch chéo ở đầu trong mẫu.
Thử nghiệm thứ ba:
# .gitignore
dir/*
# git status
Untracked files:
src/
Điều này phù hợp với trường hợp số 2: mẫu có một số dấu gạch chéo bên trong, vì vậy nó được coi là tên đường dẫn bắt đầu từ thư mục gốc.
Bây giờ là lúc cho câu hỏi thực sự. Chúng ta hãy xem xét tệp gitignore này : khi họ bỏ qua thư mục downloader/
, chẳng hạn, họ không thực sự bỏ qua mọi downloader
thư mục đơn lẻ được tìm thấy trong toàn bộ cây thư mục? Đây là những gì tôi định hướng suy nghĩ kể từ những gì tôi đã thấy về hoạt động của Git trước đây.
Vì vậy, nếu tôi tình cờ có một mô-đun tùy chỉnh với một downloader
thư mục bên trong nó, nó sẽ bất ngờ bị bỏ qua cũng như mô-đun thông thường trong thư mục gốc của Magento? Đây là một câu hỏi mang tính thực tiễn vì nó thực sự đã xảy ra với tôi, tạo ra một lỗi thực sự khó tìm.
Vì vậy, trong Magento .gitignore
tập tin (mà tôi đang đề cập đến chỉ là một ví dụ, btw) rất nhiều các mẫu chứa dấu gạch chéo, vì vậy chúng được kết hợp một cách chính xác chống lại tên đường dẫn bắt đầu từ gốc, nhưng có một vài trường hợp, như downloader/
hay errors/
mà , nếu tôi không nhầm, nó có khả năng nguy hiểm và có thể nên đổi thành /downloader/
và /errors/
.
Như một câu hỏi tổng quát hơn, tôi có nên luôn sử dụng dấu gạch chéo đầu cho các mẫu không chứa dấu gạch chéo (ngoại trừ dấu gạch chéo) khi tôi muốn chọn tên đường dẫn rõ ràng bắt đầu từ gốc và không sử dụng nó cho các mẫu có chứa dấu gạch chéo hay không, hay tôi nên luôn sử dụng dấu gạch chéo ở đầu cho rõ ràng? Bạn nghĩ gì về nó?
Cảm ơn bạn đã đọc và xin lỗi vì bài viết dài.