Start · Sprachen · PHP · Referenz · svn_repos_hotcopy

svn_repos_hotcopy

Funktion

Erstellt eine Hot-Copy eines SVN-Repositorys vom Quellpfad in den Zielpfad, ohne das Repository offline nehmen zu müssen.

Kategorie: misc

Signatur

svn_repos_hotcopy(string $repospath, string $destpath, bool $cleanlogs): bool

Beschreibung

svn_repos_hotcopy() erzeugt eine vollständige, konsistente Kopie eines Subversion-Repositorys, während dieses weiterhin aktiv genutzt werden kann. Dies entspricht dem Kommandozeilentool svnadmin hotcopy. Die Funktion gehört zur PECL-Erweiterung svn.

Eine Hot-Copy ist besonders nützlich für Backup-Szenarien, da das Repository während des Kopiervorgangs nicht gesperrt oder heruntergefahren werden muss. Commits und Lesezugriffe können weiterhin stattfinden. Die resultierende Kopie ist ein vollständig eigenständiges Repository, das sofort verwendbar ist.

Der Parameter cleanlogs steuert, ob überflüssige Berkeley-DB-Logdateien aus der Zielkopie entfernt werden sollen. Das Entfernen spart Speicherplatz, ist jedoch nur bei FSFS-Repositorys ohne Auswirkung; bei BDB-Repositorys kann es die Größe der Sicherung erheblich reduzieren.

Beide Pfade müssen als absolute Dateisystempfade (nicht als SVN-URLs) angegeben werden. Der Zielpfad sollte entweder nicht existieren oder ein leeres Verzeichnis sein.

Parameter

Name Typ Default Beschreibung
$repospath Pflicht string Absoluter Dateisystempfad zum Quell-Repository (z. B. /var/svn/myrepo). Keine SVN-URL.
$destpath Pflicht string Absoluter Dateisystempfad zum Zielort der Hot-Copy. Das Verzeichnis sollte nicht existieren oder leer sein.
$cleanlogs Pflicht bool Gibt an, ob überflüssige Transaktions-Logdateien (insbesondere bei BDB-Backends) aus der Zielkopie gelöscht werden sollen. true aktiviert die Bereinigung.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Hot-Copy erfolgreich erstellt wurde, andernfalls false. Im Fehlerfall können zusätzlich Warnungen oder Fehlermeldungen ausgegeben werden.

Beispiele

Einfaches Repository-Backup per Hot-Copy

<?php
$source = '/var/svn/myrepo';
$destination = '/var/backups/myrepo-backup-' . date('Ymd');

if (svn_repos_hotcopy($source, $destination, true)) {
    echo "Hot-Copy erfolgreich erstellt: " . $destination;
} else {
    echo "Fehler beim Erstellen der Hot-Copy.";
}
?>
Hot-Copy erfolgreich erstellt: /var/backups/myrepo-backup-20240315

Hot-Copy ohne Log-Bereinigung (z. B. zur Migration)

<?php
$source = '/srv/svn/projektrepo';
$destination = '/srv/svn-migration/projektrepo-copy';

// Logdateien werden beibehalten (cleanlogs = false)
$result = svn_repos_hotcopy($source, $destination, false);

if ($result) {
    echo "Repository wurde ohne Log-Bereinigung kopiert.";
} else {
    echo "Kopiervorgang fehlgeschlagen.";
}
?>
Repository wurde ohne Log-Bereinigung kopiert.

// Wichtig · Fallstricke

PECL-Abhängigkeit: svn_repos_hotcopy() ist Teil der PECL-Erweiterung svn und steht nicht in einer Standard-PHP-Installation zur Verfügung. Die Erweiterung muss separat installiert werden (pecl install svn).

Berechtigungen: Der PHP-Prozess (z. B. der Webserver-Benutzer) benötigt Lese-Zugriff auf den Quellpfad und Schreib-Zugriff auf den Zielpfad. Unzureichende Berechtigungen führen zu einem Fehler.

Zielpfad: Existiert der Zielpfad bereits und enthält Daten, kann die Funktion fehlschlagen oder inkonsistente Ergebnisse liefern. Es empfiehlt sich, den Zielpfad vor der Ausführung zu prüfen.

Konsistenz: Obwohl die Funktion eine laufende Kopie erlaubt, sollte das resultierende Backup auf Integrität geprüft werden, z. B. mit svnadmin verify.