Solusi yang disajikan sebagai jawaban dengan suara terbanyak adalah salah, dan dengan mudah dapat dibuktikan.
Mulailah dengan mengabaikan semua yang ada di unggahan / *:
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"
Sekarang hilangkan direktori induk dari hal-hal yang diabaikan seperti di atas:
echo 'uploads/rubbish/stuff/KEEP_ME/' >> .gitignore
echo 'uploads/rubbish/stuff/KEEP_ME/*' >> .gitignore
git status -u
Tidak menampilkan file yang tidak terlacak.
Untuk membuatnya berfungsi, Anda perlu mengabaikan semua file di bawah uploads/pohon ( uploads/**/*, bukan hanya tingkat atas, uploads/*) dan kemudian menambahkan semua direktori induk dari pohon yang ingin Anda pertahankan
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
Pemberian yang mana:
On branch master
...
Untracked files:
(use "git add <file>..." to include in what will be committed)
uploads/rubbish/stuff/KEEP_ME/a
Jika kita telah menggunakan uploads/*di .gitignoreatas, maka semua file perantara akan disertakan juga, jadi misalnya uploads/rubbish/aakan muncul di perintah status di atas.