Question

J'ai un script de construction automatisé développé par nos soins sous la forme d'un fichier de commandes DOS. Dans le cadre de ce script, je récupère (avec "svn checkout") une section de notre référentiel SVN qui inclut un ensemble d'informations tierces utilisées dans nos projets. Ce fichier de commandes a fonctionné assez bien pendant longtemps, mais maintenant les gens ont archivé beaucoup de fichiers (docs, exemple de code, etc.) dans la zone tierce et la partie de contrôle de ce script a été ralentie. Je voudrais atténuer cela en vérifiant uniquement les éléments dont nous avons besoin - principalement des fichiers DLL dans notre cas. Ma question est donc la suivante: quel est le meilleur moyen de vérifier un référentiel SVN filtré par extension de fichier?

Je n’ai pas trouvé de moyen évident de le faire dans l’aide de svn. J'ai une bibliothèque d'utilitaires .NET qui enveloppe svn.exe à certains égards, et je pensais l'étendre pour ne récupérer que le contenu correspondant à mes extensions d'intérêt. Mais je préférerais utiliser une méthode plus simple ou existante, le cas échéant.

Était-ce utile?

La solution

Cela est possible: vous pouvez svn checkout un répertoire vide, puis nom de fichier svn update pour chaque fichier que vous voulez .

Votre script peut faire quelque chose comme:

  1. svn checkout svn: // chemin / vers / repos / répertoire --depth vide
  2. svn list --recursive svn: // path / to / repos / directory
  3. Les résultats obtenus via un filtre qui supprime les extensions de fichier interdites, par exemple. grep
  4. Parcourez cette nouvelle liste filtrée et svn update --parents chaque fichier

Cela donnerait le résultat souhaité de votre copie de travail sans certains fichiers ou extensions de fichiers.

Bien sûr, il y a aussi le problème que vous avez mentionné: "les gens [vérifient] beaucoup de choses", mais c’est une question distincte.

Autres conseils

Comme je l’ai dit à ici , une seule option est intégrée à SVN: une nouvelle extraction fragmentée dans SVN 1.5, mais vous ne pouvez sélectionner que l'extraction au niveau du répertoire. Vous devez donc trier les fichiers dont vous n'avez pas besoin dans un autre répertoire.

Vous ne pouvez pas extraire quelques fichiers spécifiques, vous ne pouvez extraire qu'un dossier complet. Vous pouvez modifier l'organisation de ce que vous extrayez, ou simplement copier une copie de travail et la mettre à jour.

Pour une implémentation spécifique à PowerShell de la réponse de Michael Hackner , essayez quelque chose comme:

svn ls http://svn-server/src --recursive | Out-File svn.txt
Get-Content .\svn.txt | where {

Pour une implémentation spécifique à PowerShell de la réponse de Michael Hackner , essayez quelque chose comme:

<*>

Mon cas d'utilisation particulier ici consiste à trouver un ensemble de fichiers portant le même nom (dans ce cas * special.xml) et à les transférer tous dans un seul dossier, avec des noms essentiellement uniques. J'ai utilisé un fichier intermédiaire pour stocker l'intégralité de la liste des pensions, mais tout cela pourrait également être aligné si cela vous convient mieux.

.toLower().EndsWith('special.xml')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path =

Pour une implémentation spécifique à PowerShell de la réponse de Michael Hackner , essayez quelque chose comme:

<*>

Mon cas d'utilisation particulier ici consiste à trouver un ensemble de fichiers portant le même nom (dans ce cas * special.xml) et à les transférer tous dans un seul dossier, avec des noms essentiellement uniques. J'ai utilisé un fichier intermédiaire pour stocker l'intégralité de la liste des pensions, mais tout cela pourrait également être aligné si cela vous convient mieux.

; Munged =

Pour une implémentation spécifique à PowerShell de la réponse de Michael Hackner , essayez quelque chose comme:

<*>

Mon cas d'utilisation particulier ici consiste à trouver un ensemble de fichiers portant le même nom (dans ce cas * special.xml) et à les transférer tous dans un seul dossier, avec des noms essentiellement uniques. J'ai utilisé un fichier intermédiaire pour stocker l'intégralité de la liste des pensions, mais tout cela pourrait également être aligné si cela vous convient mieux.

.Replace('/', '_') } } | foreach { svn export "http://svn-server/src/$(

Pour une implémentation spécifique à PowerShell de la réponse de Michael Hackner , essayez quelque chose comme:

<*>

Mon cas d'utilisation particulier ici consiste à trouver un ensemble de fichiers portant le même nom (dans ce cas * special.xml) et à les transférer tous dans un seul dossier, avec des noms essentiellement uniques. J'ai utilisé un fichier intermédiaire pour stocker l'intégralité de la liste des pensions, mais tout cela pourrait également être aligné si cela vous convient mieux.

.Path)" $(

Pour une implémentation spécifique à PowerShell de la réponse de Michael Hackner , essayez quelque chose comme:

<*>

Mon cas d'utilisation particulier ici consiste à trouver un ensemble de fichiers portant le même nom (dans ce cas * special.xml) et à les transférer tous dans un seul dossier, avec des noms essentiellement uniques. J'ai utilisé un fichier intermédiaire pour stocker l'intégralité de la liste des pensions, mais tout cela pourrait également être aligné si cela vous convient mieux.

.Munged) }

Mon cas d'utilisation particulier ici consiste à trouver un ensemble de fichiers portant le même nom (dans ce cas * special.xml) et à les transférer tous dans un seul dossier, avec des noms essentiellement uniques. J'ai utilisé un fichier intermédiaire pour stocker l'intégralité de la liste des pensions, mais tout cela pourrait également être aligné si cela vous convient mieux.

Je viens d'essayer l'approche présentée par Michael Hackner. Vous trouverez ci-dessous l'implémentation pour un système DOS. Notez que vous devez extraire le dossier vide avant d'exécuter ce script.

@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"
)

La façon la plus simple et correcte de le faire: NE LE FAITES PAS!

S'il y a de la merde dans un dossier tiers où il devrait y avoir des fichiers .dll à extraire, supprimez cette merde à un autre emplacement! De toute façon, il n’appartient pas à ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top