Giải pháp được trình bày dưới dạng câu trả lời được ủng hộ nhiều nhất là không chính xác và có thể dễ dàng chứng minh như vậy.
Bắt đầu với việc bỏ qua mọi thứ trong video tải lên / *:
mkdir -p uploads/rubbish/stuff/KEEP_ME
touch uploads/a uploads/rubbish/a uploads/rubbish/stuff/a uploads/rubbish/stuff/KEEP_ME/a
echo '/uploads/*' >> .gitignore
git init
git add .
git commit -m "Initial commit"
Bây giờ bỏ qua thư mục mẹ của những thứ bị bỏ qua như trên:
echo 'uploads/rubbish/stuff/KEEP_ME/' >> .gitignore
echo 'uploads/rubbish/stuff/KEEP_ME/*' >> .gitignore
git status -u
Không hiển thị tệp chưa được theo dõi.
Để làm cho nó hoạt động, bạn cần bỏ qua tất cả các tệp dưới uploads/
cây ( uploads/**/*
, không chỉ cấp cao nhất, uploads/*
) và sau đó thêm tất cả các thư mục mẹ của cây mà bạn muốn giữ
echo '/uploads/**/*' > .gitignore
echo '!/uploads/rubbish/' >> .gitignore
echo '!/uploads/rubbish/stuff' >> .gitignore
echo '!/uploads/rubbish/stuff/KEEP_ME' >> .gitignore
echo '!/uploads/rubbish/stuff/KEEP_ME/*' >> .gitignore
git status -u
Cái nào mang lại:
On branch master
...
Untracked files:
(use "git add <file>..." to include in what will be committed)
uploads/rubbish/stuff/KEEP_ME/a
Nếu chúng ta đã sử dụng uploads/*
ở .gitignore
trên, thì tất cả các tệp trung gian cũng sẽ được bao gồm, vì vậy, ví dụ: uploads/rubbish/a
sẽ hiển thị trong lệnh trạng thái ở trên.