#git #gitignore
#git #gitignore
Вопрос:
Я погуглил, но с трудом нашел правильное решение. Если у меня есть файлы ниже, как я могу игнорировать все файлы, кроме этих трех файлов?
- package-01/config.xml
- package-02/config.xml
- package-03/config.xml
./
|-- .git/
|-- .gitignore
|-- README.md
|-- config.xml
|-- configuration
|-- package-01/
| |-- settings/
| | |-- id
| | `-- links
| |-- config.xml
| `-- other_files
|-- package-02/
| |-- settings/
| | |-- id
| | `-- links
| |-- config.xml
| `-- other_files
|-- package-03/
| |-- settings/
| | |-- id
| | `-- links
| |-- external_packages/
| | |-- 1/
| | | |-- settings.xml
| | | |-- config.xml
| | | `-- id
| | |-- 2/
| | | |-- settings.xml
| | | |-- config.xml
| | | `-- id
| |-- config.xml
| `-- other_files
Я попробовал это, но не удалось.
*
!.gitignore
!README.md
!/**/*.xml
!**/*.xml
!**.xml
!/*/*.xml
!*/*.xml
Комментарии:
1. Первая строка
*
является причиной. Он игнорирует каталоги первого уровня. В результате все в каталогах игнорируются и не могут быть исключены, что объясняется в git-scm.com/docs/gitignore#_pattern_format ,It is not possible to re-include a file if a parent directory of that file is excluded.
. Но я не знаю, как написать правильные шаблоны для удовлетворения ваших потребностей.
Ответ №1:
Исключите каталоги, содержащие config.xml
игнорируемые, затем игнорируйте все их содержимое, но исключите каждый config.xml
.
/*
!.gitignore
!README.md
!/package-01
/package-01/**
!/package-01/config.xml
!/package-02
/package-02/**
!/package-02/config.xml
!/package-03
/package-03/**
!/package-03/config.xml
Проблема с вашим подходом действительно была, как упоминал ElpieKay в комментарии:
Невозможно повторно включить файл, если родительский каталог этого файла исключен.