Die Lösung, die als die am besten bewertete Antwort dargestellt wird, ist falsch und als solche leicht nachweisbar.
Beginnen Sie damit, alles in Uploads / * zu ignorieren:
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"
Heben Sie nun das übergeordnete Verzeichnis des ignorierten Materials wie oben beschrieben auf:
echo 'uploads/rubbish/stuff/KEEP_ME/' >> .gitignore
echo 'uploads/rubbish/stuff/KEEP_ME/*' >> .gitignore
git status -u
Zeigt keine nicht verfolgten Dateien an.
Damit es funktioniert, müssen Sie alle Dateien unter dem uploads/
Baum ( uploads/**/*
nicht nur die oberste Ebene uploads/*
) ignorieren und dann alle übergeordneten Verzeichnisse des Baums hinzufügen, die Sie behalten möchten
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
Welches gibt:
On branch master
...
Untracked files:
(use "git add <file>..." to include in what will be committed)
uploads/rubbish/stuff/KEEP_ME/a
Wenn wir früher hatten uploads/*
in der .gitignore
oben, dann wird alle Zwischendateien enthalten gewesen wären als gut, so zum Beispiel uploads/rubbish/a
zeigen würde , oben in dem Statusbefehl auf.