WEBcoast Logo

.gitignore: Ignore und exclude patterns korrekt angeben

I wollte git dazu bringen einige Verzeichnisbäume zu ignoren, mit Ausnahme einzelner Unterordner bzw. -dateien. Meine Verzeichnisstruktur sah folgender Maßen aus:

.
└── public
    ├── index.php
    └── typo3conf
        ├── AdditionalConfiguration.Development.php
        ├── AdditionalConfiguration.php
        ├── LocalConfiguration.php
        ├── PackageStates.php
        └── ext
            ├── typo3_base_setup
            └── site_package

Ich wollte, dass git den komplette public Ordner ignoriert, eller nicht die LocalConfiguration.php, AdditionalConfiguration.php und den site_package Ordner. Mein erster Versuch sah so aus:

/public/*
!/public/typo3conf/LocalConfiguration.php
!/public/typo3conf/AdditionalConfiguration.php
!/public/typo3conf/ext/site_package

Aber..., das funkioniert leider nicht. Git ignorierte den kompletten public Zweig. Nachdem ich die gitignore Dokumentation gelesen und ein bisschen herum probiert hatte, kam auf eine Lösung die funktionierte:

/public/*
!/public/typo3conf
/public/typo3conf/*
!/public/typo3conf/LocalConfiguration.php
!/public/typo3conf/AdditionalConfiguration.php
!/public/typo3conf/ext
/public/typo3conf/ext/*
!/public/typo3conf/ext/site_package

Es scheint als müsste man das exclude (un-ignore) Pattern für jede Verzeichnisebene angeben. Ich bin mir nicht sicher ob das ein Bug ist, aber es dauert eine Weile, bis ich das raus hatte.