Dies ist eine professionelle Kurzeinführung, wie man das Haupt-Repository (Main Project) und Custom Extensions (Sub-Repositories) sauber trennt und verwaltet.
Das Haupt-Git-Repository enthält keinen Core-Code und keine Extension-Quellcodes (außer sie sind projekt-spezifisch, siehe Punkt 2a). Es steuert lediglich das Gerüst.
composer.json & composer.lock (Das Herzstück!)config/ (sites, system, settings).gitignore & .ddev/ (falls DDEV genutzt wird)packages/ (Nur für projekt-spezifischen Code).gitignore):/vendor (Wird per composer install generiert)/public/typo3 (Symlinks vom Core)/public/typo3conf/ext (Symlinks der Extensions)/var (Cache, Logs, Sessions)public/fileadmin (User-Uploads gehören ins Backup, nicht in den Code)Es gibt zwei professionelle Wege, abhängig von der Wiederverwendbarkeit.
Wenn eine Extension nur für diese eine Website existiert.
/packages/my_extension ab.composer.json bindest du den Ordner als lokales Repository ein.Du hast eine Extension, die in einem separaten Git-Repo liegt (z.B. GitHub/GitLab), um sie strikt zu trennen oder wiederzuverwenden.
Die Lösung: Composer als Manager.
Das Haupt-Repo speichert nicht den Code der Extension, sondern in der composer.lock nur den Verweis auf den genauen Commit-Hash.
Repository definieren:
Öffne die composer.json und füge das Git-Repo hinzu:
"repositories": [
{
"type": "vcs",
"url": "git@gitlab.com:meine-agentur/my-custom-ext.git"
}
]
Extension requiren:
composer require meine-agentur/my-custom-ext:dev-main
Lokale Entwicklung (Der "Path"-Trick): Um nicht für jede Änderung committen/pushen zu müssen:
composer config repositories.local path ../my-custom-extprojekt-root/
├── .git/ <-- Versioniert nur Config & Glue-Code
├── .gitignore
├── composer.json <-- Definiert: "Hole TYPO3 v13 & Extension X aus Git"
├── composer.lock <-- Friert den Zustand (Commit-Hashes) ein
├── config/ <-- Deine Site-Konfiguration (YAML)
├── packages/ <-- Extensions, die KEIN eigenes Git-Repo haben
├── public/ <-- Webroot
│ ├── index.php
│ └── typo3conf/ <-- Enthält fast nur noch LocalConfiguration.php
└── vendor/ <-- (IGNORED) Enthält den Code der externen Git-Repos