Comment ignorer les fichiers / répertoires dans TFS pour les éviter d'aller au référentiel source central?

254

Est-il possible de configurer des fichiers / dossiers à ignorer par projet dans le contrôle de source TFS?

Par exemple, j'ai un site Web avec un dossier d'actifs dans lequel je ne souhaite pas accéder au contrôle de code source. Ces actifs sont gérés par un système distinct. De plus, je ne veux pas mettre plusieurs gigaoctets d'actifs dans le contrôle de code source, mais j'ai besoin de quelques échantillons sur ma machine de développement, mais je ne veux pas non plus les archiver.

Si je travaille sur ce site Web en étant lié au contrôle de code source et que je rafraîchis l'arborescence, ces fichiers seront automatiquement ajoutés à nouveau

Je veux empêcher que cela se produise.

Dave
la source
1
Pour les espaces de travail locaux, vous pouvez utiliser les fichiers .tfignore comme le souligne Richard Banks. Pour ajuster ce fichier avec Context-Menue dans Team-Explorerer, voir ma réponse. Pour Server-Workspaces, j'ai fourni un lien dans les commentaires.
gReX

Réponses:

88

Pour VS2015 et VS2017

Fonctionne avec TFS (sur site) ou VSO (Visual Studio Online - l'offre hébergée par Azure)

La documentation NuGet fournit des instructions sur la façon d'accomplir cela et je viens de les suivre avec succès pour Visual Studio 2015 et Visual Studio 2017 contre VSTS (Azure hébergé TFS). Tout est entièrement mis à jour en novembre 2016 août 2018.

Je vous recommande de suivre les instructions de NuGet mais juste pour récapituler ce que j'ai fait:

  1. Assurez-vous que votre packagesdossier n'est pas validé pour TFS. Si c'est le cas, sortez-le de là.
  2. Tout le reste que nous créons ci-dessous va dans le même dossier que votre .slnfichier existe, sauf indication contraire (les instructions de NuGet ne sont pas complètement claires à ce sujet).
  3. Créez un .nugetdossier. Vous pouvez utiliser l'Explorateur Windows pour le nommer .nuget.afin qu'il réussisse à enregistrer sous .nuget(il supprime automatiquement la dernière période), mais essayer directement de le nommer .nugetpeut ne pas fonctionner (vous pouvez obtenir une erreur ou il peut changer le nom, selon votre version de Windows ). Ou nommez le nuget de répertoire et ouvrez le répertoire parent à l'invite de ligne de commande. type. ren nuget .nuget
  4. À l'intérieur de ce dossier, créez un NuGet.configfichier et ajoutez le contenu suivant et enregistrez-le:

NuGet.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <solution>
        <add key="disableSourceControlIntegration" value="true" />
    </solution>
</configuration>
  1. Retournez dans votre .slndossier et créez un nouveau fichier texte et nommez-le .tfignore(si vous utilisez l'Explorateur Windows, utilisez la même astuce que ci-dessus et nommez-le .tfignore.)
  2. Mettez le contenu suivant dans ce fichier:

.tfignore:

# Ignore the NuGet packages folder in the root of the repository.
# If needed, prefix 'packages' with additional folder names if it's 
# not in the same folder as .tfignore.
packages

# include package target files which may be required for msbuild,
# again prefixing the folder name as needed.
!packages/*.targets
  1. Enregistrez tout cela, validez-le dans TFS, puis fermez et rouvrez Visual Studio et Team Explorer ne devrait plus identifier le dossier des packages comme un enregistrement en attente.
  2. Copiez / collez via l'Explorateur Windows le .tfignorefichier et le .nugetdossier dans toutes mes différentes solutions et validez-les et je n'ai plus le packagesdossier essayant de se faufiler dans mon dépôt de contrôle de source!

Personnalisation supplémentaire

Bien que ce ne soit pas le mien, j'ai trouvé ce .tfignoremodèle de sirkirby très pratique. L'exemple de ma réponse couvre le packagesdossier Nuget , mais ce modèle comprend d'autres éléments ainsi que des exemples supplémentaires qui peuvent être utiles si vous souhaitez personnaliser davantage.

Jaxidian
la source
1
Suivi de cela sur VS 2017 - TFS 2015. Fonctionné comme un charme. Tous mes packages Nuget n'apparaissent plus comme des modifications en attente.
James Walsh Jr,
Je venais d'ouvrir les modifications détectées et d'ajouter manuellement les fichiers nouvellement créés aux modifications en attente. Sauf que tout fonctionnait bien.
Machado
Ça n'a pas marché pour moi. VS 2017 - TFS 2015. Je ne peux rien archiver. Lorsque j'essaye, j'obtiens l'erreur suivante: "D: \ Src \ MiniCoreWebAPI \ packages \ Microsoft.IdentityModel.Protocols.5.2.1 \ lib \ net451 \ Microsoft.IdentityModel.Protocols .dll: Impossible de trouver une partie du chemin "
Rod
Je n'ai pas fait archiver mon dossier de packages, mais il a déjà été détecté comme une modification en attente. Après avoir appliqué ces instructions, j'ai dû "Annuler les modifications en attente" sur le dossier des packages, puis tout allait bien lorsque j'ai reconstruit et NuGet restauré les packages.
CodeHxr
172

Si vous utilisez des espaces de travail locaux (TFS 2012+), vous pouvez désormais utiliser le .tfignorefichier pour exclure les dossiers et fichiers locaux de l' archivage .

Si vous ajoutez ce fichier au contrôle de code source, vous pouvez vous assurer que les autres membres de votre équipe partagent les mêmes paramètres d'exclusion.

Détails complets sur MSDN - http://msdn.microsoft.com/en-us/library/ms245454.aspx#tfignore

Pour les paresseux:

Vous pouvez configurer les types de fichiers à ignorer en plaçant un fichier texte appelé .tfignoredans le dossier où vous souhaitez appliquer les règles. Les effets du .tfignorefichier sont récursifs. Cependant, vous pouvez créer des fichiers .tfignore dans des sous-dossiers pour remplacer les effets d'un .tfignore fichier dans un dossier parent.

Les règles suivantes s'appliquent à un fichier .tfignore:

  • # commence une ligne de commentaire
  • Les * et? les caractères génériques sont pris en charge.
  • Une spécification de fichier est récursive sauf si elle est préfixée par le caractère \.
  • ! annule une spécification de fichier (les fichiers qui correspondent au modèle ne sont pas ignorés)

Exemple de fichier:

# Ignore .cpp files in the ProjA sub-folder and all its subfolders
ProjA\*.cpp
# 
# Ignore .txt files in this folder 
\*.txt
#
# Ignore .xml files in this folder and all its sub-folders
*.xml
#
# Ignore all files in the Temp sub-folder
\Temp
#
# Do not ignore .dll files in this folder nor in any of its sub-folders
!*.dll
Richard Banks
la source
35
j'ai essayé de faire ça. la seule chose ignorée est le contenu du fichier .tfignore :(
user1852503
15
@SerjSagan mon ordinateur ne me permettait pas de créer .tfignoredonc j'ai créé .tfignore.et il a supprimé le dernier point de lui-même ..
Peter
5
Le problème est qu'il ignore uniquement les ressources, qui ont été 1) explicitement supprimées dans la fenêtre Explorateur de contrôle de code source avant l'archivage et 2) explicitement exclues dans la fenêtre Modifications en attente . Par exemple, si vous allez l'utiliser pour ignorer le dossier des packages et compter sur NuGet Package Restore, vous devrez 1) supprimer le dossier des packages dans l' Explorateur du contrôle de code source , puis 2) l'exclure dans la fenêtre Modifications en attente après le processus de restauration du package NuGet . Sinon, il archivera toujours le dossier des packages .
Deilan
1
Si Windows ne vous permet pas de créer le .tfignorefichier en raison de son absence de nom correct, vous pouvez le créer ou le renommer via une fenêtre de ligne de commande.
Zarepheth
1
Il y a un problème majeur avec .tfignore dans VS2015. Les gens sont très mécontents , mais il ne semble pas y avoir d'énoncé clair du problème ni d'engagement clair à le résoudre.
bbsimonbb
71

Il ne semble un peu lourd à ignorer les fichiers (et dossiers) dans Team Foundation Server. J'ai trouvé quelques façons de le faire (en utilisant TFS / Team Explorer / Visual Studio 2008). Ces méthodes fonctionnent également avec le type de projet ASP de site Web.

Une façon consiste à ajouter un élément nouveau ou existant à un projet (par exemple, cliquer avec le bouton droit sur le projet, ajouter un élément existant ou glisser-déposer depuis l'explorateur Windows vers l'explorateur de solutions), laisser TFS traiter le ou les fichiers ou le dossier, puis annuler en attente changements sur les articles. TFS les marquera comme ayant une modification d'ajout en attente, et les fichiers resteront tranquillement dans le projet et resteront en dehors de TFS.

Une autre méthode consiste à utiliser la commande Ajouter des éléments au dossier de l'Explorateur de contrôle de source. Cela lance un petit assistant, et sur l'une des étapes, vous pouvez sélectionner les éléments à exclure (bien que, je pense que vous devez ajouter au moins un élément à TFS avec cette méthode pour que l'assistant vous laisse continuer).

Vous pouvez même ajouter une stratégie d'enregistrement de modèles interdits (sous Équipe -> Paramètres du projet d'équipe -> Contrôle de source ... -> Politique d'enregistrement) pour empêcher d'autres personnes de l'équipe de vérifier par erreur certains actifs.

Derek Morrison
la source
7
Je n'avais pas de politique de modèles interdits. La réponse à une question connexe révèle où l'obtenir. Il fait apparemment partie des outils électriques TFS .
Leif Carlsen
1
Je suis confronté à un problème similaire, pouvez-vous fournir plus de détails sur un dossier particulier à ne pas archiver à l'aide de la politique d'enregistrement
Imran Rizvi
Oups - vous avez raison, Leif. Il fait partie des outils électriques TFS.
Derek Morrison
Imran, malheureusement, j'ai changé de travail, je n'utilise plus TFS et je n'ai pas accès à mes projets précédents, donc je ne suis pas sûr de la syntaxe de la syntaxe de la politique d'enregistrement des modèles interdits. Peut-être que cette question vous aide? stackoverflow.com/questions/2741412/…
Derek Morrison
TFS 2010 Après avoir choisi les fichiers à inclure, vous pouvez les exclure de cette liste. Impossible de toucher aux fichiers existants ...
JNF
47

Pour TFS 2013 :

Démarrez dans VisualStudio - Team Explorer , dans la boîte de dialogue PendingChanges, annulez les modifications avec l'état [add], qui doivent être ignorées.

Visual Studio détectera à nouveau les ajouts. Cliquez sur "Détecté: x ajouter (s)" dans les modifications exclues

Dans la boîte de dialogue "Promouvoir les modifications de Cadidate" ouverte, vous pouvez facilement exclure des fichiers et des dossiers avec le menu contextuel. Les options sont:

  • Ignorer cet article
  • Ignorer par extension
  • Ignorer par nom de fichier
  • Ignorer par ffolder (oui ffolder, TFS 2013 Update 4 / Visual Studio 2013 Premium Update 4)

N'oubliez pas d'archiver le fichier .tfignore modifié.

Pour VS 2015/2017 :

La même procédure: Dans l'onglet "Modifications exclues" de TeamExplorer \ Modifications en attente, cliquez sur Détecté: xxx ajouter (s)

L'onglet Modifications exclues dans TeamExplorer \ Modifications en attente

La boîte de dialogue "Promouvoir les changements de candidats" s'ouvre et sur les entrées, vous pouvez cliquer avec le bouton droit de la souris pour le menu contextuel. La faute de frappe est corrigée maintenant :-)

gReX
la source
Impossible de trouver cette option. Je suis sur VS 2015 RC.
Shimmy Weitzhandler
cela ne fonctionnera que si vous travaillez avec un espace de travail local, comme décrit en détail ici: msdn.microsoft.com/library/vstudio/…
stvn
@Shimmy: La procédure dans VS 2015 RC est la même, avec toujours la même faute de frappe. Voir ma réponse mise à jour. Mais comme le souligne stvn .tfignore ne fonctionne qu'avec des espaces de travail locaux. Pour les espaces de travail serveur, vous devez annuler l'inclusion dans les enregistrements en attente, voir la réponse ici: stackoverflow.com/questions/21887308/…
gReX
@Shimmy: Êtes-vous connecté à TFS-Server 2015? Assurez-vous que vous commencez avec Team Explorer dans VS
gReX
@ qw1564 Je suis tout à fait sûr, lorsque la question a été posée en premier, ce n'était pas possible à la manière. Mais maintenant, c'est la réponse que je choisirais. Merci pour les crédits!
gReX
5

J'ai trouvé le moyen idéal d'ignorer les fichiers TFS comme SVN le fait.
Tout d'abord, sélectionnez le fichier que vous souhaitez ignorer (par exemple Web.config).
Maintenant, allez dans l'onglet menu et sélectionnez:

Contrôle de source de fichier> Avancé> Exclure web.config du contrôle de source

... et boom; votre fichier est définitivement exclu du contrôle de code source.

Bharat
la source
1
cela fonctionne pour moi sur TFS 2010 pour les fichiers générés par le code. THX!
BozoJoe
1
Cela fonctionne réellement, le .tfignore ne fonctionne pas pour moi. Merci beaucoup
EpicKip
2
Je n'ai pas cette option dans VS 2018
Adam
4

Je vais supposer que vous utilisez des projets de site Web. Ceux-ci analysent automatiquement leur répertoire de projet et jettent tout dans le contrôle de code source. Il n'y a aucun moyen de les arrêter.

Cependant, ne désespérez pas. Les projets d'application Web ne présentent pas ce comportement étrange et plutôt inattendu (imho: moronic). WAP est un module complémentaire pour VS2005 et est livré directement avec VS2008.

Au lieu de changer vos projets en WAP, vous pouvez envisager de déplacer le dossier Assets hors du contrôle Source et dans une bibliothèque de documents TFS. Ne faites cela que si le projet lui-même n'utilise pas directement les fichiers d'actifs.

Pas moi
la source
oui, votre hypothèse est correcte. Je pensais que ce serait le cas, je voulais juste être doublement sûr de ne rien manquer.
Dave