gitignore игнорирует все, кроме config.xml файл внутри каталога второго уровня?

#git #gitignore

#git #gitignore

Вопрос:

Я погуглил, но с трудом нашел правильное решение. Если у меня есть файлы ниже, как я могу игнорировать все файлы, кроме этих трех файлов?

  1. package-01/config.xml
  2. package-02/config.xml
  3. 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 в комментарии:

Невозможно повторно включить файл, если родительский каталог этого файла исключен.

(см https://git-scm.com/docs/gitignore )