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 .gitignoreyukarıdaki kuyu, böylece örneğin, o zaman tüm ara dosyalar dahil olurdu uploads/rubbish/aYukarıdaki durum komuta kadar gösterecek.