En çok oylanan cevap olarak sunulan çözüm yanlıştır ve bu nedenle kolayca ispatlanabilir.
Yüklemelerde her şeyi göz ardı ederek başlayı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"
Şimdi, yukarıdaki gibi göz ardı edilen öğelerin ana dizinini yoksayın:
echo 'uploads/rubbish/stuff/KEEP_ME/' >> .gitignore
echo 'uploads/rubbish/stuff/KEEP_ME/*' >> .gitignore
git status -u
İzlenmemiş dosya göstermez.
Çalışmasını sağlamak için, uploads/
ağacın altındaki tüm dosyaları ( uploads/**/*
sadece en üst seviyeyi değil) yok saymanız uploads/*
ve ardından saklamak istediğiniz ağacın tüm ana dizinlerini eklemeniz gerekir.
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
Hangi verir:
On branch master
...
Untracked files:
(use "git add <file>..." to include in what will be committed)
uploads/rubbish/stuff/KEEP_ME/a
Kullandığımız olsaydı uploads/*
içinde .gitignore
yukarıdaki kuyu, böylece örneğin, o zaman tüm ara dosyalar dahil olurdu uploads/rubbish/a
Yukarıdaki durum komuta kadar gösterecek.