Signatur
Beschreibung
svn_import() ist Teil der PECL-Erweiterung svn und ermöglicht es, einen lokalen, noch nicht unter Versionskontrolle stehenden Pfad direkt in ein Subversion-Repository zu importieren. Der Vorgang entspricht dem SVN-Kommandozeilenbefehl svn import.
Im Gegensatz zu svn_add() und svn_commit(), die einen bestehenden Working-Copy-Workflow erfordern, wird bei svn_import() kein lokaler Working Copy angelegt. Das heißt: Der importierte Inhalt bleibt nach dem Import nicht als ausgechecktes Verzeichnis zurück – es wird lediglich der Stand einmalig ins Repository übertragen.
Typische Anwendungsfälle sind das erstmalige Hochladen eines Projekts in ein leeres oder neues Repository-Verzeichnis sowie automatisierte Deployments und Build-Skripte, bei denen kein persistenter Working Copy auf dem Server benötigt wird.
Der Parameter $nonrecursive steuert, ob Unterverzeichnisse ebenfalls importiert werden sollen. Wird true übergeben, werden nur die direkten Inhalte des angegebenen Verzeichnisses importiert, keine Unterordner.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $path Pflicht | string | Lokaler Dateisystempfad zur Datei oder zum Verzeichnis, das importiert werden soll. Kann absolut oder relativ sein. | |
| $url Pflicht | string | Ziel-URL im SVN-Repository, z. B. http://example.com/svn/meinprojekt/trunk. Das Zielverzeichnis muss im Repository bereits existieren oder automatisch angelegt werden können. |
|
| $nonrecursive Pflicht | bool | Wenn true, werden Unterverzeichnisse nicht rekursiv importiert. Bei false wird der gesamte Verzeichnisbaum übertragen. |
Rückgabewert
true zurück, wenn der Import erfolgreich war, andernfalls false. Im Fehlerfall können über svn_last_error() detailliertere Fehlerinformationen abgerufen werden.Beispiele
Einfacher rekursiver Import eines Projektverzeichnisses
<?php
// Gesamtes lokales Verzeichnis rekursiv in das SVN-Repository importieren
$localPath = '/var/www/meinprojekt';
$repoUrl = 'http://svn.example.com/repos/meinprojekt/trunk';
$success = svn_import($localPath, $repoUrl, false);
if ($success) {
echo "Import erfolgreich abgeschlossen.";
} else {
$error = svn_last_error();
echo "Fehler beim Import: " . $error[1];
}
Nicht-rekursiver Import (nur oberste Ebene)
<?php
// Nur die Dateien im Wurzelverzeichnis importieren, keine Unterordner
$localPath = '/var/www/meinprojekt';
$repoUrl = 'http://svn.example.com/repos/meinprojekt/trunk';
// $nonrecursive = true => Unterverzeichnisse werden ignoriert
$success = svn_import($localPath, $repoUrl, true);
if ($success) {
echo "Nicht-rekursiver Import erfolgreich.";
} else {
echo "Import fehlgeschlagen.";
}
// Wichtig · Fallstricke
Wichtig: svn_import() ist Teil der PECL-Erweiterung svn, die separat installiert werden muss (pecl install svn). Die Erweiterung setzt eine kompatible Version der Subversion-Bibliothek (libsvn) voraus.
Nach einem erfolgreichen Import wird kein Working Copy auf dem lokalen System angelegt. Wenn anschließend mit dem Verzeichnis weitergearbeitet werden soll, muss es mit svn_checkout() erst ausgecheckt werden.
Authentifizierungsdaten für das Repository (Benutzername, Passwort) können vorab über svn_auth_set_parameter() gesetzt werden, z. B.:svn_auth_set_parameter(SVN_AUTH_PARAM_DEFAULT_USERNAME, 'benutzer');
Die PECL-svn-Erweiterung wird nicht mehr aktiv weiterentwickelt. Für neue Projekte sollte geprüft werden, ob der Aufruf von SVN über proc_open() oder eine modernere Bibliothek eine robustere Alternative darstellt.