TYPO3 (Composer, V13) effizient als GIT Repository verwalten

Dies ist eine professionelle Kurzeinführung, wie man das Haupt-Repository (Main Project) und Custom Extensions (Sub-Repositories) sauber trennt und verwaltet.


1. Das Haupt-Repository (The Root Project)

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.

Was gehört ins GIT:

Was wird ignoriert (.gitignore):


2. Strategie für Custom Extensions

Es gibt zwei professionelle Wege, abhängig von der Wiederverwendbarkeit.

Szenario A: Die "Monorepo"-Lösung (Projekt-spezifische Extensions)

Wenn eine Extension nur für diese eine Website existiert.

Szenario B: Eigene Repositories (Wiederverwendbare Extensions)

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.

Schritt-für-Schritt Integration:

  1. 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"
        }
    ]
  2. Extension requiren:

    composer require meine-agentur/my-custom-ext:dev-main
  3. Lokale Entwicklung (Der "Path"-Trick): Um nicht für jede Änderung committen/pushen zu müssen:

    • Lege die Extension lokal neben dein Hauptprojekt (außerhalb).
    • Nutze: composer config repositories.local path ../my-custom-ext
    • Composer symlinkt nun die lokale Version.

3. Zusammenfassung der Ordnerstruktur

projekt-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