SVN-Checkout-Ordner ignorieren


98

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:


104

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

Hinweis: Es gab einen Fehler in einigen 1.5-Versionen, der dies mitsvn: Shallowing of working copy depths is not yet supported
gcb

79

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


2
Upvoted, weil ich nicht einen riesigen Ordner auschecken musste, der für meine Arbeit nicht relevant war.
Dohpaz42

1
Das ist großartig, zusammen mit der SVN-Bereinigung hat mir das 12 GiB erspart.
JonnyJD

1
Prüft das nicht zunächst alles?
Huangismus

9

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 lalaes der Kasse hinzufügen.

Vermutlich funktioniert das auch mit 1.5.


6

Dies ist in TortoiseSVN Client 1.7.1 (möglicherweise auch in einigen älteren Versionen verfügbar):

  • SVN-Checkout -> URL des Repositorys auswählen

  • Klicken Sie auf "Checkout Items" (unter Checkout Depth) und wählen Sie nur die gewünschten Ordner aus!


4

Sie können den Ordner docs in ein externes Repository stellen und dann verwenden svn checkout --ignore-externals.


Dies haben wir letztendlich getan, um einige vorgefertigte Komponenten in einem früheren Job zu überspringen.
Mark Bessey

2
Ich verstehe nicht was das external repositorybedeutet. Kannst du es erklären?
Victor

4

Ja, Subversion 1.5 verfügt über eine Funktion namens Sparse Checkout , mit der genau dies möglich ist.


2
Nach dem Lesen sieht es so aus, als würden spärliche Kassen nur die Tiefe einer Kasse begrenzen. Sie können einen bestimmten Ordner nicht ignorieren.
John Millikin

Sicher, Sie müssen möglicherweise ein wenig zusätzliche Arbeit leisten, z. B. die Tiefe des übergeordneten Ordners mit --depth sofort begrenzen und dann alle anderen Ordner außer dem Ordner überprüfen, den Sie ignorieren möchten. Der Punkt ist, die Werkzeuge sind da, wenn Sie sie verwenden müssen.
Greg Hewgill

Ich schätze die Erwähnung von SparseCheckouts und es ist sicher interessant, aber diese Antwort geht nicht auf die ursprüngliche Frage ein. Sicher, ich kann jeweils eine Datei auschecken, und das führt dazu, dass ich lokale Kopien bestimmter Dateien habe, die ich möchte, aber was für ein Ärgernis, jede einzeln ausführen zu müssen. Ich glaube, der Autor dieser Frage fragt nach dem Ignorieren eines bestimmten Ordners, nicht nach der Tiefe von x Ordnern, und lässt den Computer die Arbeit erledigen - dieselbe Arbeit, die Sie empfehlen, könnte manuell ausgeführt werden.
Barrypicker

Die Versionen ab Version 1.6 bieten die zusätzliche Möglichkeit, Ordner zu ignorieren und allgemeiner zu steuern, was in einer Arbeitskopie eingeschlossen / ausgeschlossen werden soll (wobei v1.5 in dieser Version
FruitBreak

3

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.


Welche Sprache ist das?
Pup

Dies sind Unix-Shell-Befehle (sie können auch als Skriptdatei gespeichert und ausgeführt werden)
mrlem

2

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,


1
Hey, was sind 6 Jahre für Entwickler? In Ihrer letzten Zeile haben Sie $ ubrpath. Wo ist das eingestellt?
D-Klotz

1
@ D-Klotz, danke, das sollte stattdessen $ rpath sein, was wiederum auf den Repository-Pfad gesetzt ist. <br/> Entschuldigung für ein Jahr Verspätung
bv.

1

Nein, Ignorieren dient nur zum Hinzufügen von Dateien.
Sie können spärliche Kassen verwenden (wenn Sie SVN 1.5 verwenden)


1

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.