Frage

Ich habe einen home-grown automatisierte Build-Skript in Form einer DOS-Batch-Datei. Im zweiten Teil des Skripts, ich check out (mit „svn checkout“) einem Abschnitt unserer SVN-Repository, das eine Reihe von Drittanbietern Sachen enthält, die in unseren Projekten verwendet wird. Diese Batchdatei ausgeführt ziemlich gut für eine lange Zeit, aber jetzt Menschen haben in vielen Flaum (docs, Beispielcode, etc.) in den Fremdbereich und die Kasse Teil dieses Skripts bekommen hat viel langsamer geprüft. Ich möchte dies mildern, indem nur die Sachen heraus überprüfen wir brauchen - meist DLL-Dateien in unserem Fall. So ist meine Frage: Was ist der beste Weg, um eine SVN-Repository nach Dateierweiterung gefiltert überprüfen

Ich habe offensichtliche Art und Weise dies nicht in der SVN-Hilfe zu tun. Ich habe eine .NET-Dienstprogramm-Bibliothek, die svn.exe in gewisser Weise wickelt, und ich dachte, diese zu verlängern nur Inhalte abzurufen, die meine Erweiterungen von Interesse angepasst. Aber ich würde es vorziehen, ein einfacheres oder bestehendes Verfahren zu verwenden, wenn ein solches vorhanden ist.

War es hilfreich?

Lösung

Dies ist möglich. Sie können ein leeres Verzeichnis svn checkout, und dann für jede Datei, die Sie svn update filename tun wollen

Ihr Skript kann wie etwas tun:

  1. svn checkout svn://path/to/repos/directory --depth empty
  2. svn list --recursive svn://path/to/repos/directory
  3. Rohr, das durch einen Filter zur Folge hat, dass die verbotenen Dateierweiterungen entfernt, z.B. grep
  4. Iterate über diese neue gefilterte Liste und svn update --parents jede Datei

Das wäre Ihr gewünschtes Ergebnis einer Arbeitskopie ohne bestimmte Dateien oder Dateierweiterungen geben.

Natürlich gibt es auch das Problem, das Sie erwähnen, „Menschen [checking] in vielen Flaum“, aber das ist eine andere Angelegenheit.

Andere Tipps

Wie ich hier , gibt es nur eine Option in SVN bauen sich vor: Eine neue 1.5 Features in SVN genannt spärliche Kasse , jedoch können Sie nur Kasse auf Verzeichnisebene, so dass Sie die Dateien, die Sie nicht in einem anderen Verzeichnis müssen sortieren müssen.

Sie können nicht nur wenige bestimmte Dateien überprüfen - Sie nur einen ganzen Ordner überprüfen können. Sie können die Organisation neu anordnen, was Sie Check-out, oder Sie können nur eine Arbeitskopie von woanders und zu aktualisieren kopieren.

Für eine Powershell-spezifische Implementierung der Antwort von Michael Hackner , versuchen Sie so etwas wie:

svn ls http://svn-server/src --recursive | Out-File svn.txt
Get-Content .\svn.txt | where {$_.toLower().EndsWith('special.xml')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path = $_; Munged = $_.Replace('/', '_') } } | foreach { svn export "http://svn-server/src/$($_.Path)" $($_.Munged) }

Ihr hier insbesondere Anwendungsfall wird eine Reihe von Dateien mit ähnlichen Namen zu finden (in diesem Fall * special.xml) und sie alle in einem einzigen Ordner, mit im Wesentlichen eindeutige Namen Dumping. Ich habe eine Zwischendatei zu speichern, die gesamte Repo-Auflistung verwendet, aber dies alles auch inlined werden könnte, wenn das für Dich besser ist.

Ich habe gerade versucht, den Ansatz präsentiert von Michael Hackner. Unten ist die Implementierung für ein DOS-System. Beachten Sie, dass Sie die leeren Ordner vor dem Ausführen dieses Skripts zur Kasse haben.

@echo off

svn list --recursive https://path_to_repository_folder | find /I ".sql" > filelist.txt

REM Specify a custom delim. Otherwise space in filename will be treated as a delimiter.
FOR /F "delims=|" %%i  IN (filelist.txt) DO (
    echo -------------
    echo %%i
    svn update --parents "%%i"
)

Die einfachste und eine richtige Art und Weise, dies zu tun: Tun Sie es nicht!

Wenn es etwas Mist in Dritte-Ordner ist, wo es annimmt DLL-Dateien zu sein, die Kasse sein muss - entfernen, dass Mist an einen anderen Ort! Es ist nicht hier sowieso gehört.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top