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.