Как разрешить экземплярам подкаталога gitignore отслеживать файл, игнорируя все остальное?

Возможный дубликат:
Git - Белые файлы в сложной структуре каталогов

Я хотел бы иметь только файлы треков git для репозитория, названные, например. SOURCES, в то время как все остальное игнорируется (например, дерево файлов pdf, в котором каждый файл SOURCES перечисляет свое происхождение). Самый простой снимок был бы

*
!SOURCES

в .gitignore. Однако исключение, например, A/SOURCES переопределяется *, требуя, чтобы я использовал git add -f. Как можно изменить .gitignore, чтобы игнорировать все, кроме файлов с именем SOURCES, не требуя принудительного добавления?

изменить Решение опубликовано здесь не будет, поскольку структура каталогов не исправлена, то есть новые каталоги, содержащие файл SOURCES, должны не нужно добавлять к .gitignore вручную...

Ответ 1

Вы не можете достичь этого, используя только .gitignore

Git не отслеживает пути. Он отслеживает только объекты (~ файлы).

Итак, почему бы вам не перевернуть таблицы:

git add -f -- */*/SOURCES */SOURCES

или

shopt -s globstar
git add -f -- **/SOURCES

Или вытащите большие пушки:

git add -f -- $(find -type f -name SOURCES)

или даже

find -type f -name SOURCES -exec git add -f -- {} \+

Неподтвержденная идея Возможно, что-то подобное может быть связано с фиксацией pre-commit?


Обновить Идея для большей автоматизации:

Добавьте это в .git/config

[alias]
ac = "!_() { git add -f -- */*/SOURCES && git commit \"[email protected]\"; }; _"

Теперь вы можете просто сказать

git commit -m 'like you usually work'

и он автоматически добавит */*/SOURCES