Kann ich einen Ordner an der SVN-Kasse ignorieren? Ich muss den DOCs-Ordner beim Auschecken auf meinem Build-Server ignorieren.
Bearbeiten: Externe ignorieren ist keine Option. Ich habe einige externe Geräte, die ich brauche.
Kann ich einen Ordner an der SVN-Kasse ignorieren? Ich muss den DOCs-Ordner beim Auschecken auf meinem Build-Server ignorieren.
Bearbeiten: Externe ignorieren ist keine Option. Ich habe einige externe Geräte, die ich brauche.
Antworten:
Sie können Ordner an einer Kasse nicht direkt ignorieren, aber Sie können spärliche Kassen in SVN 1.5 verwenden. Beispielsweise:
$ svn co http://subversion/project/trunk my_checkout --depth immediates
Dadurch werden Dateien und Verzeichnisse aus Ihrem Projekt-Trunk in 'my_checkout' eingecheckt, jedoch nicht in diese Verzeichnisse zurückgeführt. Z.B:
$ cd my_checkout && ls
bar/ baz foo xyzzy/
Dann, um den Inhalt von 'bar' nach unten zu bringen:
$ cd bar && svn update --set-depth infinity
svn: Shallowing of working copy depths is not yet supported
Ja, Sie können SVN 1.6 verwenden. Sie müssen zuerst eine Kasse durchführen, dann den Ordner zum Ausschluss markieren und dann den unerwünschten Ordner löschen.
svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs
Von nun an werden Aktualisierungen der Arbeitskopie den Ordner "docs" nicht mehr füllen.
Siehe http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ und http://subversion.apache.org/docs/release-notes/1.6.html#sparse- Verzeichnisausschluss für weitere Details.
Tom
Bei Versionen vor 1.5 habe ich festgestellt, dass Updates nur dann das bewirken, was Sie ausgecheckt haben, wenn Sie nur den obersten Ordner auschecken und dann selektiv aktualisieren. Dh.
svn co -N foo
cd foo
svn up -N bar
svn up
Das Flag -N macht die Operation nicht rekursiv. Das Obige wird nichts anderes auf der foo-Ebene überprüfen, z. Angenommen, es gibt einen Ordner lala
. Der endgültige SVN-Server überprüft diesen Ordner nicht, wird jedoch aktualisiert bar
.
Aber zu einem späteren Zeitpunkt können Sie svn up lala
es der Kasse hinzufügen.
Vermutlich funktioniert das auch mit 1.5.
Sie können den Ordner docs in ein externes Repository stellen und dann verwenden svn checkout --ignore-externals
.
external repository
bedeutet. Kannst du es erklären?
Ja, Subversion 1.5 verfügt über eine Funktion namens Sparse Checkout , mit der genau dies möglich ist.
Ich fand diese Frage auf der Suche nach einer Möglichkeit, die WebKit-Quellen zu überprüfen und dabei die Regressionstests auszuschließen. Am Ende hatte ich Folgendes:
svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
--depth immediates
cd WebKit
find . \
-maxdepth 1 -type d \
-not -name '.*' \
-not -name '*Tests' \
-not -name 'Examples' \
-not -name 'Websites' \
| (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)
Beachten Sie, dass Sie die Ausschlüsse nach Belieben ändern können. Es wird jedoch empfohlen, das Arbeitsverzeichnis (das bereits auf dem neuesten Stand ist) und alle .svn-Verzeichnisse zu überspringen.
Ich habe vor kurzem die gleiche Aufgabe gelöst. Die Idee ist, die sofortige Liste der Ordner / Dateien unter dem Repository abzurufen, die benötigten Einträge auszuschließen, dann die verbleibenden Ordner zu überprüfen und die sofortigen Dateien zu aktualisieren, falls vorhanden. Hier ist die Lösung:
# Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
# This files are to be excluded (folders are ending with '/')
# this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
# Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
# Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
# Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
# Initial nonrecursive checkout of repository - just empty
# to the current (./) working directory
svn co $rpath ./ --depth empty && \
# Update the files
svn up $files &&\
# Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`
Wechseln Sie in das Quellarbeitsverzeichnis. Kopieren Sie die Befehle. Einfügen. Ändern Sie die entsprechende URL und schließen Sie das Muster aus. Führen Sie den Befehl aus.
Vielen Dank,
Nein, Ignorieren dient nur zum Hinzufügen von Dateien.
Sie können spärliche Kassen verwenden (wenn Sie SVN 1.5 verwenden)
Wie einige andere bereits erwähnt haben, können Sie beim Auschecken einfach die Eigenschaften svn: externals und dann die Option --ignore-externals verwenden. Zu beachten ist jedoch, dass svn: externals nicht unbedingt auf ein anderes Repository verweisen muss. Es kann ein Verweis auf einen anderen Ordner im selben Repo sein.