web-dev-qa-db-fra.com

Obtenir que TFS ignore mon dossier de paquets

J'essaie d'obtenir que TFS (2013) ignore mon dossier packages. Passionnément, je ne veux pas que le code source soit contrôlé car j'utilise NuGet et c'est génial!

J'ai essayé de masquer (cela ne semble pas fonctionner), j'ai essayé d'ajouter des fichiers .tfignore - rien n'est ignoré. Pourquoi l’équipe TFS n’a-t-elle pas simplement ajouté une option permettant d’ignorer définitivement un dossier ou un fichier comme le font de nombreux clients Subversion?!

318
Matt

Voici le problème: nous devons dire à NuGet et à TFS d’ignorer les paquets, car NuGet essaie de faire des choses liées au contrôle de source qu’il ne devrait absolument pas s faire (mauvaise forme, Microsoft!). Donc, vous devez faire deux choses. NuGet.config Tout d'abord, ajoutez un fichier nommé .tfignore au dossier de la solution (notez le manque de s après le tf). Son contenu devrait être comme suit:

\packages

Cela indique à TFS d'ignorer votre dossier de packages. Maintenant, vous penseriez que cela ignorerait également le fichier repositories.config. Mais ça ne va pas. Pourquoi? Qui sait, les voies de Microsoft sont étranges et mystérieuses. En fait, je pense que cela fait partie des éléments de NuGet que je décris ci-dessous, mais si cela devait être résolu à l'avenir et que vous souhaitiez conserver le fichier repositories.config au lieu de laisser VS le régénérer, vous devriez pouvoir utiliser ceci:

\packages
!\packages\repositories.config

OK, alors maintenant, grâce à notre fichier .tfignore, TFS ignore vos paquets. Tout va bien, non? FAUX, car NuGet bricole avec votre contrôle de code source et ajoute les packages à vos modifications en attente. Alors maintenant, disons à NuGet de le supprimer déjà.

Créez un dossier appelé .nuget à la racine du dossier de votre solution.1 Maintenant, créez un fichier nommé NuGet.config et placez-le dans ce nouveau dossier.2. Son contenu devrait ressembler à ceci:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

Et maintenant vos paquets doivent rester en dehors du contrôle de source. Rappelez-vous simplement d’ajouter les fichiers NuGet.config et .tfignore au contrôle de source pour qu’ils ne soient jamais perdus.

EDIT: Si vous rencontrez des problèmes, vous souhaiterez peut-être supprimer votre dossier de packages, archiver cette modification, puis suivez les étapes ci-dessus.

ALSO EDIT: Il semble que cela ne se produira pas avec les nouvelles versions de Nuget. Alors peut-être que si vous passez à VS/TFS 2017, ce problème sera résolu sans passer par les étapes ci-dessus.

1. Ajoutez le dossier en utilisant Source Control Explorer; cliquez avec le bouton droit sur la solution-> Ajouter un dossier ->. nuget
2. Quand j'ai compris cela avec VS 2013, j'ai découvert que le NuGet.config devait aller dans le dossier .nuget. Même si vous avez déjà un fichier NuGet.config à la racine du dossier de votre solution (car, par exemple, votre entreprise dispose d’un flux de nugets interne). Cependant, certains commentaires ont indiqué que cela fonctionnait bien à la racine de la solution dans VS 2015. Personnellement, je suis passé à l’utilisation de TFS en mode git, je ne peux donc pas tester. De plus, si vous avez un flux personnalisé, assurez-vous que le fichier personnalisé et nuget.org sont les clés du fichier Nuget.config, sinon TFS décidera parfois de manière aléatoire qu'il ne peut pas restaurer les packages.

483
Pharylon

Une solution alternative à ce qui précède est la suivante.

  • Ajouter le dossier des packages à TFS (sans aucun fichier ni sous-dossier)
  • Clic droit sur le dossier Packages
  • Clic gauche avancé
  • Cape Clic

Il est à noter que cette solution devra être appliquée par espace de travail TFS. Cela a fonctionné de manière beaucoup plus fiable pour moi plutôt que d'utiliser le fichier .tfignore.

Vous pouvez en savoir plus sur cette approche dans l'article de blog Empêcher TFS d'ajouter des packages NuGet installés au contrôle de source .

51
Ryan Gates

pour les personnes signalant que l'option .tfignore ne fonctionnait pas avec le paramètre nuget.config, cela pourrait présenter un intérêt - ces étapes ont finalement fonctionné pour moi:

  1. Supprimer tout dans mon dossier de paquets
  2. Assurez-vous que TFS n'a pas de modifications concernant ce dossier en attente
  3. Fermer VS
  4. Relancez la solution de VS et de rechargement - utilisez la restauration Nuget pour re-peupler les packages. Remarque: aucune modification n'est en attente pour le contrôle de source TFS.
22
Adam Stewart

Ajoutez un fichier nuget.config dans un dossier .nuget de votre solution. Ajoutez les éléments suivants au fichier nuget.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

DésactiverSourceControlIntegration est ce qui fait l’astuce de TFS Version Control.

8
Terje Sandstrøm

Vous devez utiliser des espaces de travail locaux pour que .tfignore fonctionne. Le fichier .tfignore doit se trouver dans le dossier contenant les fichiers ou les dossiers que vous souhaitez ignorer.

Donc, si votre structure de solution ressemble à ceci:

\Project
   \Packages
   \OtherStuff
   foo.cs

Vous mettriez votre fichier .tfignore dans\Project:

\Project
   \Packages
   \OtherStuff
   foo.cs
   .tfignore

Le contenu du fichier .tfignore dans votre cas serait:

\packages

Voici de la documentation pour vous: http://msdn.Microsoft.com/library/vstudio/ms245454 (v = vs.110) .aspx # tfignore

7
Daniel Mann

Vous pouvez définir cette option de manière permanente dans votre AppData\Roaming pour toutes les solutions (anciennes et nouvelles)!

Dans votre fichier %AppData%\NuGet\NuGet.Config, ajoutez les éléments suivants juste avant la balise XML </configuration> ...

<config>
  <add key="repositoryPath" value="C:\NuGetPackages" />
</config>
<solution>
  <add key="disableSourceControlIntegration" value="true" />
</solution>

... vous pouvez spécifier le chemin que vous voulez - l'important est de le placer à l'extérieur de votre espace de travail TFS!

Maintenant, vous n'avez plus jamais à vous soucier de ce genre de choses. Votre dossier de solution ne contiendra plus aucun paquet; toutes les solutions utiliseront par défaut votre emplacement de packages personnalisés.

NOTE - Cela fonctionne utilisateur par utilisateur.

6
Heliac

Définissez votre solution pour la restauration lors de la construction, le dossier et le fichier de packages seront archivés, mais pas les packages.

2
Just TFS

La solution qui a fonctionné pour moi a été de créer à la fois un .tfignore et le paramètre suivant dans Nuget.Config:

<configuration>
  ...
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>  
  ...
</configuration>

Mon .tfignore contient cette ligne:

\packages

[J'utilise Visual Studio 2015 Update 2]

Ce n’est pas idéal, et est actuellement consigné en tant que question ouverte sur github/nuget:

Facilite l'omission des paquets de TFVC # 49

1
redcalx

Cela n'a pas fonctionné pour moi sur Visual Studio Online et VS2013.

  • Cliquez avec le bouton droit sur Solution> Activer la restauration du paquet NuGet. Cela va ajouter le fichier Nuget.config à la solution

enter image description here

  • Ajoutez le .tfignore. Pour ce faire, j'ajoute normalement un fichier texte à la racine de la solution, ce qui permet de le détecter, puis d'exclure en cliquant sur "Ajout détecté>> clic droit sur Ignorer.

enter image description here

  • Ajoutez les packages à .tfignore et indiquez-lui d'inclure repositories.config

enter image description here

Parmi les autres commentaires, il semble que votre kilométrage peut varier à ce stade. C'est ce que je fais:

  • Tout vérifier, y compris les forfaits.

  • Supprimez tous les packages de votre solution, puis archivez cette modification (cela supprimera les packages de TFS).

  • Ouvrez la solution et générez qui ajoutera les packages au projet mais TFS ne les récupérera pas.

1
David Wilton

Si vous utilisez Git avec TFS, vous devez ajouter un fichier ".gitignore". Vous pouvez le faire dans "Projet d'équipe | Paramètres | 'Ajouter un fichier à ignorer'". Ensuite, ouvrez le fichier et supprimez la mise en commentaire de l'instruction ignore intégrée pour les paquets Nuget.

Si vous utilisez TFVC et que des espaces de travail locaux sont configurés, vous pouvez utiliser le fichier ".tfignore" respectant un format identique à celui du fichier Git. Je pense que vous avez besoin de "packages /".

Terje's answer ne fonctionne pas tout le temps pour moi, parfois cela fonctionnera pendant un certain temps, mais ensuite, il restera une charge de "ajoute" pour moi à nouveau.

Le seul moyen que j'ai trouvé pour résoudre ce problème de façon permanente consiste à fermer le dossier des paquets dans mon espace de travail.

Par exemple:

Type      Server                Local
============================================
Active    $/Work/Main           C:\Code\Main
Cloaked   $/Work/Main/Packages
0
DaveShaw

J'ai eu le même problème. /packages devrait fonctionner, mais pas pour moi. packages*.* a fonctionné.

0
coding4fun