最も支持されている答えとして提示されたソリューションは正しくなく、そのように簡単に実証できます。
uploads / *のすべてを無視することから始めます。
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"
上記のように、無視されたものの親ディレクトリを無視します。
echo 'uploads/rubbish/stuff/KEEP_ME/' >> .gitignore
echo 'uploads/rubbish/stuff/KEEP_ME/*' >> .gitignore
git status -u
追跡されていないファイルは表示されません。
これを機能させるには、uploads/
ツリーの下にあるすべてのファイル(uploads/**/*
だけでなく、最上位レベルuploads/*
)を無視して、保持するツリーのすべての親ディレクトリを追加する必要があります。
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
それは与える:
On branch master
...
Untracked files:
(use "git add <file>..." to include in what will be committed)
uploads/rubbish/stuff/KEEP_ME/a
上記で使用uploads/*
した.gitignore
場合、すべての中間ファイルも含まれているため、たとえばuploads/rubbish/a
上記のstatusコマンドに表示されます。