Start · Sprachen · PHP · Referenz · svn_add

svn_add

Funktion

Plant das Hinzufügen einer Datei oder eines Verzeichnisses aus der Subversion-Arbeitskopie zur Versionsverwaltung.

seit PHP 0.1.0 Kategorie: misc

Signatur

svn_add(string $path, bool $recursive = true, bool $force = false): bool

Beschreibung

svn_add() markiert eine Datei oder ein Verzeichnis in einer lokalen SVN-Arbeitskopie zum Hinzufügen (scheduled for addition). Die Änderung wird erst beim nächsten svn_commit() tatsächlich in das Repository übertragen. Die Funktion entspricht dem Kommandozeilen-Befehl svn add.

Der Parameter $recursive steuert, ob bei Verzeichnissen auch alle enthaltenen Unterverzeichnisse und Dateien rekursiv vorgemerkt werden sollen. Standardmäßig ist dies aktiviert. Mit $force lässt sich das Hinzufügen auch dann erzwingen, wenn Pfade bereits versioniert sind oder ignoriert werden.

Die Funktion ist Teil der PECL-Erweiterung svn und erfordert, dass diese installiert und aktiviert ist. Sie eignet sich besonders in automatisierten Build- oder Deployment-Skripten, die Dateien programmatisch in ein SVN-Repository einchecken müssen.

Parameter

Name Typ Default Beschreibung
$path Pflicht string Lokaler Dateisystempfad zur Datei oder zum Verzeichnis in der Arbeitskopie, das zur Versionsverwaltung hinzugefügt werden soll.
$recursive bool true Wenn true (Standard), werden bei Verzeichnissen alle enthaltenen Dateien und Unterverzeichnisse rekursiv ebenfalls vorgemerkt.
$force bool false Wenn true, wird das Hinzufügen auch für bereits versionierte oder durch svn:ignore ignorierte Pfade erzwungen.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das Vormerken zum Hinzufügen erfolgreich war, andernfalls false.

Beispiele

Einzelne Datei zur Arbeitskopie hinzufügen

<?php
// Eine neue Datei in der Arbeitskopie erstellen und für SVN vormerken
$workingCopyPath = '/var/www/mein-projekt';
$neueDate = $workingCopyPath . '/config/neue-einstellungen.php';

// Datei erstellen
file_put_contents($neueDate, '<?php return ["debug" => false];');

// Datei für SVN vormerken
if (svn_add($neueDate)) {
    echo "Datei erfolgreich für SVN vorgemerkt.\n";
    // Jetzt committen
    $result = svn_commit('Neue Konfigurationsdatei hinzugefügt', [$neueDate]);
    if ($result) {
        echo "Commit erfolgreich. Revision: " . $result['revision'] . "\n";
    }
} else {
    echo "Fehler beim Vormerken der Datei.\n";
}
Datei erfolgreich für SVN vorgemerkt. Commit erfolgreich. Revision: 42

Neues Verzeichnis rekursiv hinzufügen

<?php
// Neues Verzeichnis mit Inhalt erstellen und rekursiv vormerken
$workingCopyPath = '/var/www/mein-projekt';
$neuesVerzeichnis = $workingCopyPath . '/src/neues-modul';

mkdir($neuesVerzeichnis, 0755, true);
file_put_contents($neuesVerzeichnis . '/ModulKlasse.php', '<?php class ModulKlasse {}');
file_put_contents($neuesVerzeichnis . '/helpers.php', '<?php function helfer() {}');

// Gesamtes Verzeichnis rekursiv vormerken
if (svn_add($neuesVerzeichnis, true)) {
    echo "Verzeichnis und Inhalt erfolgreich vorgemerkt.\n";
} else {
    echo "Fehler beim Vormerken des Verzeichnisses.\n";
}

// Mit force=true auch ignorierte Dateien einschließen
$ignorierteDatei = $workingCopyPath . '/logs/debug.log';
if (svn_add($ignorierteDatei, false, true)) {
    echo "Ignorierte Datei erfolgreich hinzugefügt.\n";
}
Verzeichnis und Inhalt erfolgreich vorgemerkt. Ignorierte Datei erfolgreich hinzugefügt.

// Wichtig · Fallstricke

PECL-Erweiterung erforderlich: svn_add() ist Teil der PECL-Erweiterung svn und nicht im PHP-Kern enthalten. Die Erweiterung muss über PECL installiert werden (pecl install svn) und die zugehörige libsvn muss auf dem System vorhanden sein.

Nur Vormerken, kein sofortiger Commit: Die Funktion führt lediglich ein lokales Schedule for Addition durch. Um die Änderungen tatsächlich ins Repository zu übertragen, muss anschließend svn_commit() aufgerufen werden.

Pfadangabe: Der Pfad muss auf eine existierende lokale Datei oder ein lokales Verzeichnis innerhalb einer gültigen SVN-Arbeitskopie zeigen. Relative und absolute Pfade werden unterstützt.