Seit einiger Zeit arbeite ich bereits mit SVN in meinen Programmierprojekten, da es eine große Hilfe beim Rückgängigmachen von fehlerhaften Implementierungen ist und die Zusammenarbeit zwischen mehreren Leuten stark vereinfacht. Derzeit verwende ich in meinen PHP-Projekten gerne das Template-System Smarty , da es recht schnell und unkompliziert arbeitet. Bis vor wenigen Minuten habe ich bei Aktualisierungen dieser Templateengine immer in meiner lokalen Arbeitskopie Smarty gelöscht und anschließend das heruntergeladene Archiv der neuen Version wieder entpackt und in das SVN eingecheckt. Eine prinzipiell unnötige Arbeit, da Smarty bereits in einem SVN im Web bereitgestellt wird.

Der Vorgang ist nun folgender: Bei einem Checkout in eine lokale Arbeitskopie, wird von extern Smarty (In diesem Fall dem SVN von Smarty auf googlecode ) ausgecheckt. Was genau ausgecheckt wird, wird durch die Eigenschaft svn:externals festgelegt. Ich möchte ind en folgenden Beispielen im Verzeichnis libs einen Ordner namens Smarty haben, in dem die derzeit aktuelle Stable-Version von Smarty abgelegt wird. Ich demonstriere den Vorgang zunächst anhand des Windows-Tools TortoiseSVN :

TortoiseSVN

Zunächst macht man einen Rechtsklick im Ordner “libs” und wählt im Menü “TortoiseSVN” den Punkt “Eigenschaften” aus.

TortoiseSVN

Im sich nun öffnenden Fenster klickt man auf “Hinzufügen”. Dort wählt man im Dropdown “svn:externals” aus und im Eingabefeld wird nun der gewünschte Ordner “Smarty” sowie die URL der gewünschten Version (derzeit 2.6.19) von Smarty angegeben, was in meinem Falle nun:

Smarty http://smarty-php.googlecode.com/svn/tags/Smarty_2_6_19/libs/

lautet.

TortoiseSVN

Nach dem ersten Klick auf OK, sollte das in etwa wie auf dem Bild links aussehen. Nach einem weiteren OK sollte nun die Arbeitskopie aktualisiert werden, womit Smarty importiert wird. Anschließend muss man noch einmal übertragen (commit), um die Eigenschaft “svn:externals” im SVN zu speichern. Die Kopie von Smarty wird hierbei jedoch NICHT übertragen, diese wird bei jedem Client dann von extern geupdatet.

Alternativ gibt es die Kommandozeilenbefehle:

1
2
3
svn propset svn:externals "Smarty http://smarty-php.googlecode.com/svn/tags/Smarty_2_6_22/libs/" libs
svn up
svn commit

Der Vorteil ist nun, dass bei Updates von Smarty nur die Variable svn:externals für das Verzeichnis libs aktualisiert werden muss. Prinzipiell könnte man diese auch auf den trunk setzen, um immer die aktuellste Version zu haben, jedoch hat man damit auch durchaus gelegentlich eine nicht funktionierende Version in der Arbeitskopie, was für die Entwicklung hinderlich ist.