Signatur
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
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 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.";
}
?>
// 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.