SVN checkout ignore le dossier


Réponses:


104

Vous ne pouvez pas ignorer directement les dossiers lors d'une extraction, mais vous pouvez utiliser des extractions éparses dans svn 1.5. Par exemple:

$ svn co http://subversion/project/trunk my_checkout --depth immediates

Cela vérifiera les fichiers et les répertoires de votre tronc de projet dans «my_checkout», mais ne reviendra pas dans ces répertoires. Par exemple:

$ cd my_checkout && ls
bar/ baz foo xyzzy/

Ensuite, pour obtenir le contenu de 'bar':

$ cd bar && svn update --set-depth infinity

Remarque: il y avait un bogue dans certaines versions 1.5 qui empêchait cela avecsvn: Shallowing of working copy depths is not yet supported
gcb

79

Oui, vous pouvez utiliser SVN 1.6. Vous devrez d'abord effectuer une extraction, puis marquer le dossier à exclure, puis supprimer le dossier indésirable.

svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs

Désormais, les mises à jour de la copie de travail ne rempliront plus le dossier docs.

Voir http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ et http://subversion.apache.org/docs/release-notes/1.6.html#sparse- exclusion de répertoire pour plus de détails.

À M


2
J'ai voté pour parce que cela m'a évité d'avoir à extraire un énorme dossier qui n'était pas pertinent pour mon travail.
dohpaz42

1
C'est génial, avec svn cleanup, cela m'a permis d'économiser 12 Gio.
JonnyJD

1
Cela ne vérifie-t-il pas toujours tout au début?
Huangism

9

Avec les versions antérieures à 1.5, j'ai constaté que si vous ne récupérez que le dossier le plus haut, puis mettez à jour de manière sélective, à partir de là, les mises à jour n'affectent que ce que vous avez extrait. C'est à dire.

svn co -N foo
cd foo
svn up -N bar
svn up

L'indicateur -N rend l'opération non récursive. Ce qui précède ne vérifiera rien d'autre au niveau foo, par exemple. disons qu'il y a un dossier lala, le dernier svn up ne retirera pas ce dossier, mais il sera mis à jour bar.

Mais plus tard, vous pouvez svn up lalaet donc l'ajouter à la caisse.

Vraisemblablement, cela fonctionne également avec 1.5.


6

Ceci est dans le client TortoiseSVN 1.7.1 (peut également être disponible dans certaines versions plus anciennes):

  • Vérification SVN -> Sélectionnez l'URL du référentiel

  • Cliquez sur "Checkout Items" (sous Checkout Depth) et sélectionnez uniquement les dossiers requis!


4

Vous pouvez placer le dossier docs dans un référentiel externe, puis utiliser svn checkout --ignore-externals.


C'est ce que nous avons fini par faire pour ignorer certains composants pré-construits dans un travail précédent.
Mark Bessey

2
Je ne comprends pas ce que cela external repositorysignifie. Pouvez-vous l'expliquer?
Victor

4

Oui, Subversion 1.5 a une fonctionnalité appelée Checkouts Sparse qui peut faire exactement ce genre de chose.


2
À la lecture de cela, il semble que les caisses éparses ne limitent que la profondeur d'une caisse. Ils ne peuvent pas ignorer un dossier particulier.
John Millikin

Bien sûr, vous devrez peut-être faire un peu de travail supplémentaire, comme limiter la profondeur du dossier parent avec --depth immédiatates, puis vérifier tous les autres dossiers sauf celui que vous souhaitez ignorer. Le fait est que les outils sont là si vous devez les utiliser.
Greg Hewgill

J'apprécie la mention de SparseCheckouts, et c'est certainement intéressant, mais cette réponse ne répond pas à la question initiale. Bien sûr, je peux extraire un fichier à la fois, et cela me permettra d'avoir des copies locales de fichiers spécifiques que je veux, mais quelle douleur dans le cul d'avoir à faire chacun individuellement. Je crois que l'auteur de cette question demande d'ignorer un dossier spécifique, pas la profondeur de x dossiers, et de permettre à l'ordinateur de faire le travail - le même travail que vous recommandez pourrait être accompli manuellement.
barrypicker

Les versions 1.6+ offrent la possibilité supplémentaire d'ignorer les dossiers et plus de contrôle général de ce qu'il faut inclure / exclure dans une copie de travail (où la v1.5 est très limitée dans ce cas) svnbook.red-bean.com/en/1.7/svn. advanced.sparsedirs.html
FruitBreak

3

J'ai trouvé cette question à la recherche d'un moyen de consulter les sources WebKit tout en excluant les tests de régression. J'ai fini avec ce qui suit:

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)

Notez que vous pouvez modifier les exclusions comme bon vous semble, mais. * Est recommandé d'ignorer le répertoire de travail (qui est déjà à jour) et tous les répertoires .svn.


Quelle langue est-ce?
Pup

ce sont des commandes shell unix (elles peuvent également être enregistrées et exécutées sous forme de fichier script)
mrlem

2

J'ai récemment résolu la même tâche. L'idée est d'obtenir la liste immédiate des dossiers / fichiers sous le référentiel en excluant les entrées dont vous avez besoin, puis de vérifier les dossiers restants et de mettre à jour les fichiers immédiats le cas échéant. Voici la solution:

    # 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"`

Accédez au répertoire de travail source. Copiez les commandes. Pâte. Modifiez l'URL appropriée et excluez le modèle. Exécutez la commande.

Merci,


1
hé quoi de 6 ans pour les développeurs? Sur votre dernière ligne, vous avez $ ubrpath. Où est cet ensemble?
D-Klotz

1
@ D-Klotz, merci, cela devrait être $ rpath à la place, qui à son tour est défini sur le chemin du référentiel. <br/> Désolé pour un an de retard
bv.

1

Non, ignorer sert uniquement à ajouter des fichiers.
Vous pouvez utiliser des extractions éparses (si vous utilisez svn 1.5)


1

Comme quelques autres l'ont mentionné, vous pouvez simplement utiliser les propriétés svn: externals, puis l'option --ignore-externals lorsque vous passez à la caisse. Une chose à noter, cependant, est que svn: externals n'a pas nécessairement besoin de faire référence à un autre référentiel. Il peut s'agir d'une référence à un autre dossier du même dépôt.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.