Start · Sprachen · PHP · Referenz · svn_import

svn_import

Funktion

Importiert einen unversionierten lokalen Pfad (Datei oder Verzeichnis) in ein Subversion-Repository unter der angegebenen URL.

Kategorie: misc

Signatur

svn_import(string $path, string $url, bool $nonrecursive): bool

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

Typ
bool
Beschreibung
Gibt 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];
}
Import erfolgreich abgeschlossen.

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.";
}
Nicht-rekursiver Import erfolgreich.

// 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.