Tôi đang cố gắng hiểu rõ hơn cú pháp .gitignore
và đặc biệt là đến chừng https://github.com/github/gitignore gitignores có liên quan.Khi nào sử dụng dấu gạch chéo hàng đầu trong gitignore
Tôi thấy rằng các dấu gạch chéo hàng đầu được sử dụng để phù hợp với chỉ đường dẫn Tìm tương đối so với vị trí của file .gitignore
(từ http://git-scm.com/docs/gitignore):
Một dấu gạch chéo hàng đầu phù hợp với đầu tên đường dẫn. Ví dụ: "/ *.c" khớp với "cat-file.c" nhưng không phải "mozilla-sha1/sha1.c".
Nhưng điều gì xảy ra khi tôi xóa dấu gạch chéo hàng đầu? Theo như những gì tôi hiểu, có hai trường hợp:
- Nếu mẫu không có dấu gạch chéo (hoặc chỉ chứa dấu gạch chéo, có nghĩa là nó phải khớp với một thư mục), tìm kiếm được thực hiện bên trong toàn bộ cây thư mục. Ví dụ: mẫu
dir/
sẽ khớp với<root>/dir
,<root>/a/dir
,<root>/a/b/c/.../dir
, v.v., trong đó<root>
là vị trí của tệp.gitignore
. - Nếu mẫu có dấu gạch chéo, không ở vị trí cuối (nó không phải là ký tự cuối cùng), thì nó chỉ được khớp với tên đường dẫn tương ứng với vị trí tệp
.gitignore
.
Đâ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.
Đầu tiên kiểm tra:
# .gitignore
dir/
# git status
nothing to commit
Vì vậy, Git là bỏ qua cả 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 (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ứ khớp với mẫu.
thử nghiệm thứ hai:
# .gitignore
/dir/
# git status
Untracked files:
src/
Ở đây, Git được bỏ qua chỉ thư mục dir
trực tiếp bên dưới thư mục gốc, nhờ vào các dấu gạch chéo hàng đầu trong mô hình.
Thứ ba thử nghiệm:
# .gitignore
dir/*
# git status
Untracked files:
src/
này phù hợp với trường hợp số 2: mô hình có một số dấu gạch chéo bên trong nó, vì vậy nó được coi là một 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ự. Hãy xem xét this gitignore file: khi họ bỏ qua thư mục downloader/
, chẳng hạn, họ có thực sự bỏ qua mọi thư mục downloader
đơn được tìm thấy trong toàn bộ cây thư mục không? Đây là những gì tôi được định hướng để suy nghĩ 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 thư mục downloader
bên trong nó, nó sẽ bị bỏ qua bất ngờ 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 khó hiểu bởi 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 đề cập đến chỉ là một ví dụ, btw) rất nhiều các mẫu có dấu gạch chéo, do đó, chúng được kết hợp chính xác với tên đường dẫn bắt đầu từ gốc, nhưng có một vài các trường hợp, như downloader/
hoặc errors/
, nếu tôi không nhầm, có khả năng gây nguy hiểm và có thể được thay đổi thành /downloader/
và /errors/
. Là một câu hỏi tổng quát hơn, tôi có nên sử dụng dấu gạch chéo hàng đầu cho các mẫu không chứa dấu gạch ngang (trừ dấu gạch chéo) khi tôi muốn chọn một tên đường dẫn bắt đầu từ gốc và không sử dụng nó cho các mẫu có dấu gạch chéo hay tôi luôn sử dụng dấu gạch chéo hàng đầu để làm rõ? Bạn nghĩ gì về nó?
Cảm ơn bạn đã đọc và xin lỗi vì bài đăng dài.
Great câu hỏi và thật sự tốt đẹp giải thích, tôi cũng bị làm phiền với điều này và nghiên cứu của bạn làm cho mọi việc rõ ràng với tôi. Sau khi đọc điều này tôi sẽ nói rằng thực hành tốt là luôn luôn bắt đầu các đường dẫn với dấu gạch chéo nếu chúng bắt đầu từ gốc, nó làm cho ý định rõ ràng hơn. – Martinsos
Cảm ơn :) Tôi đồng ý với lưu ý của bạn về việc sử dụng dấu gạch chéo để làm cho ý định rõ ràng hơn. – swahnee
Đây phải là một phần của tài liệu .gitignore. Dễ hiểu hơn nhiều! – rmorrin