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