10
votes

Pouvez-vous faire un TFS GET sans avoir besoin d'un espace de travail?

J'essaie de changer nos scripts de construction de l'utilisation de SourceSafe à TFS sans utiliser MsBuild (encore).

Un HICCUP est que le répertoire d'espace de travail est renommé et archivé par les scripts, ce qui fait que TFS pense que besoin d'obtenir des fichiers. Même avec le drapeau / force , cela reçoit simplement les répertoires sans obtenir les fichiers source.

J'utilise actuellement xxx

Pour me sauvegarder, gérer les espaces de travail dans les scripts ou utiliser des répertoires intermédiaires, quelqu'un connaît-il une commande pouvant obtenir des répertoires et du code sans avoir besoin d'un espace de travail?

tfs

0 commentaires

6 Réponses :


0
votes

Je ne sais pas pourquoi vos buildscripts suppriment les annuaires de l'espace de travail à chaque fois. Mais pour répondre à votre question, je ne pense pas que vous puissiez obtenir un code source de TFS sans espace de travail. Peut-être que vous pouvez essayer de créer un espace quelconque à chaque fois que vous devez obtenir. La commande est xxx


1 commentaires

L'espace de travail a été effacé pour s'assurer qu'aucun dossier en cache accidentel n'était utilisé. Ce n'est pas un gros problème de tout copier dans un autre répertoire de travail qui est effacé à la place.



3
votes

Un espace de travail est un mappage entre l'emplacement du référentiel source et l'emplacement du système de fichiers, donc non, vous ne pouvez pas vous échapper sans utiliser d'espace de travail. Mais vous pouvez facilement mettre en place un espace de travail lorsque vous devez.

Voici une simple tâche TFS que j'utilise pour obtenir mes fichiers source de base de données de TFS avant de faire des substitutions de texte et de les construire dans un package de mise à jour de la base de données. Vous pouvez facilement traduire cela à la syntaxe que vos scripts de construction actuels nécessitent: P>

<Target Name="GetDatabaseSources">
    <!-- clean out the folder before doing the fresh get of the database sources -->
    <Folder.CleanFolder Path="$(DatabaseBuildBaseLocation)" Force="true"/>

    <!-- create a workspace for the database source of the product -->
    <CallTarget Targets="CreateDatabaseSourceWorkspace" />
    <!-- get the database sources for the product -->
    <Get TeamFoundationServerUrl="$(TeamFoundationServerUrl)" Workspace="$(DatabaseSourceWorkspaceName)" Recursive="true" Version="$(DatabaseSourceVersion)" Force="true" />
    <!-- delete the workspace -->
    <Exec Command="$(Tf) workspace /delete $(DatabaseSourceWorkspaceName) /server:$(TeamFoundationServerUrl) /noprompt " ContinueOnError="true" />
</Target>

<!-- creates and maps a temporary workspace for the database source of the product -->
<Target Name="CreateDatabaseSourceWorkspace">
    <Exec Command="$(Tf) workspace /delete $(DatabaseSourceWorkspaceName) /server:$(TeamFoundationServerUrl) /noprompt " ContinueOnError="true" />
    <Exec Command="$(Tf) workspace /new $(DatabaseSourceWorkspaceName) /server:$(TeamFoundationServerUrl) /noprompt" />
    <Exec Command="$(Tf) workfold /unmap /workspace:$(DatabaseSourceWorkspaceName) $/" />
    <Exec Command="$(Tf) workfold /map /workspace:$(DatabaseSourceWorkspaceName) /server:$(TeamFoundationServerUrl) $(DatabaseSourceLocation) &quot;$(DatabaseBuildBaseLocation)&quot;"  />
</Target>


0 commentaires

14
votes

Il n'est pas possible d'exécuter un tf obtenir code> sans espace de travail. La raison en est que le serveur doit connaître le mappage entre les chemins de serveur et les chemins locaux.

Si vous travaillez avec un grand nombre de fichiers, ce n'est pas une bonne idée de: p>

  1. Créez et supprimez un nouvel espace de travail à chaque fois li>
  2. ou, créez un nouvel espace de travail (et ne le supprimez jamais) LI> ol>

    La raison en est que chaque fois que vous faites un obtenez code>, le serveur conserve la piste de quels fichiers, à quelles versions ont été téléchargées sur quel espace de travail. Si vous ne nettoyez jamais ces espaces de travail, la table qui stocke ces informations augmentera dans le temps. P>

    En outre, si vous créez et supprimez un espace de travail tout le temps, le serveur doit écrire toutes ces lignes, Puis supprimez-les lorsque vous avez terminé. Ceci est inutile. P>

    Vous devez vraiment essayer de réutiliser le même espace de travail à chaque fois. Si vous le faites, le serveur est très efficace à propos de vous envoyer uniquement des fichiers qui ont changé depuis que vous les téléchargez. Même si votre construction se déplace d'une branche à une autre, vous pouvez utiliser TF get / remap code> qui est parfois plus efficace si les branches partagent des fichiers communs. P>

    Bien que ça ne puisse pas Résolvez votre problème, il est possible de répertorier des fichiers et de télécharger des fichiers sans espace de travail. p>

    pour répertorier les fichiers: strong> p>

    tf view $/Product/Main/Project1/file.cs
    


3 commentaires

OK, il semble que le chemin du moindre résistance consiste à vérifier le code sur un espace de travail stable, puis copiez le code de là dans les répertoires de travail du script de construction.


Avez-vous pensé à vous engager dans la proposition Visual Studio Alm Stackexchange? zone51.stackexchange.com/proposals/15894/...


Cette solution est plus propre car elle implique uniquement d'obtenir (aucune opération de déplacement de fichier nécessaire): Stackoverflow.com/questions/10624031/...



0
votes

Vous pouvez le faire facilement avec SourceSafe: Obtenez une version à n'importe quel répertoire spécifique que vous vouliez. Et c'était très souvent très pratique. Il y a souvent des occasions pourquoi on voudrait faire cela. La honte (si) TFS ne le supporte pas, il s'agit d'une fonctionnalité manquante, IMHO.


0 commentaires

3
votes

neno loje créé Un petit utilitaire qui fait exactement ce dont vous avez besoin . Pour démarrer, il peut également supprimer toutes les liaisons de contrôle de la source de la solution et du fichier de projet, si vous avez besoin de cela.


0 commentaires

1
votes

C # a la bibliothèque VersionControlServer et vous pouvez utiliser VERSIONCONTROLSERVER.GETITEMS Appelez à Fetch TFS article . Si l'optionType est Fichier, appelez téléchargementfile pour récupérer le fichier.


2 commentaires

Ce n'est pas ce que getItems fait. getItems obtient les informations sur l'élément s dans tfs. Cela ne les télécharge pas dans le système de fichiers.


Désolé j'ai omis des informations. Vous pouvez utiliser GetItems pour obtenir les informations du système de fichiers, puis vous pouvez faire boucler l'information sur l'article et appeler le téléchargement.