如何忽略TFS中的文件/目录以避免它们进入中央源存储库?


254

是否可以在TFS源代码管理中针对每个项目设置要忽略的文件/文件夹?

例如,我有一个网站,其中包含一个我不想进入源代码管理的资源文件夹。这些资产由单独的系统维护。此外,我不想将数GB的资产放入源代码管理中,但是我需要在我的开发机上安装几个示例,但是我不想在其中两个示例中进行检查。

如果我在绑定源代码管理时正在此网站上工作,并且刷新树,则这些文件将自动重新添加

我想防止这种情况的发生。


1
对于本地工作区,您可以使用.tfignore-文件,如Richard Banks指出的那样。有关在teamExplorerer中使用Context-Menue调整此文件的信息,请参阅我的答案。对于服务器工作区,我在评论中提供了一个链接。
gReX

Answers:


88

对于VS2015和VS2017

与TFS(本地)或VSO(Visual Studio Online-Azure托管的产品)一起使用

NuGet文档提供了有关如何完成此操作的说明,我刚刚针对VSTS(Azure托管的TFS)针对Visual Studio 2015和Visual Studio 2017成功地遵循了它们。截至201611月,所有内容已全面更新.2018 8月。

我建议您按照NuGet的说明进行操作,但仅重述一下我所做的事情:

  1. 确保您的packages文件夹未提交到TFS。如果是这样,请将其取出。
  2. .sln除非另有说明(否则,NuGet的说明尚不完全清楚),我们在下面创建的所有其他内容都将放入文件所在的文件夹中。
  3. 创建一个.nuget文件夹。您可以使用Windows资源管理器对其进行命名,.nuget.以成功将其另存为.nuget(它会自动删除最后一个句点),但是直接尝试命名它.nuget可能行不通(可能会出现错误,也可能会更改名称,具体取决于您的Windows版本) )。或命名目录nuget,然后在命令行提示符下打开父目录。类型。任努吉.nuget
  4. 在该文件夹内,创建一个NuGet.config文件并添加以下内容并保存:

NuGet.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <solution>
        <add key="disableSourceControlIntegration" value="true" />
    </solution>
</configuration>
  1. 返回您.sln的文件夹,创建一个新的文本文件并命名.tfignore(如果使用Windows资源管理器,请使用与上述相同的技巧并命名.tfignore.
  2. 将以下内容放入该文件:

.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. 保存所有这些内容,将其提交到TFS,然后关闭并重新打开Visual Studio,团队资源管理器不应再将packages文件夹标识为挂起的签入。
  2. 通过Windows资源管理器将.tfignore文件和.nuget文件夹复制/粘贴到我所有的各种解决方案中,并提交它们,而我不再拥有packages试图潜入我的源代码控制存储库的文件夹!

进一步定制

虽然不是我的,但我发现sirkirby的.tfignore模板很方便。我的答案中的示例涵盖了Nuget packages文件夹,但是此模板还包含其他一些内容,并提供了其他示例,如果您希望进一步自定义此示例,它们可能会很有用。


1
在VS 2017-TFS 2015上遵循了此步骤。我所有的Nu​​get软件包都不再显示为待更改。
詹姆斯·沃尔什(James Walsh Jr)

我只需要打开检测到的更改,然后手动将新创建的文件添加到待处理的更改中即可。除了一切正常。
马查多

这对我不起作用。VS 2017-TFS2015。我无法检入任何内容。尝试时出现以下错误:“ D:\ Src \ MiniCoreWebAPI \ packages \ Microsoft.IdentityModel.Protocols.5.2.1 \ lib \ net451 \ Microsoft.IdentityModel.Protocols .dll:找不到路径的一部分”
Rod

我没有将我的packages文件夹签入,但是已将其检测为待更改。应用这些说明后,我必须在“ packages”文件夹中“撤消待更改”,然后在重建和NuGet还原软件包时一切都很好。
CodeHxr

172

如果您使用的是本地工作区(TFS 2012+),则现在可以使用该.tfignore文件来排除本地文件夹和文件。

如果将该文件添加到源代码管理中,则可以确保团队中的其他人共享相同的排除设置。

有关MSDN的完整详细信息-http: //msdn.microsoft.com/zh-cn/library/ms245454.aspx#tfignore

对于懒惰的人:

通过.tfignore在要应用规则的文件夹中放置一个名为的文本文件,可以配置忽略哪些类型的文件。该.tfignore文件的效果是递归的。但是,您可以在子文件夹中创建.tfignore文件,以覆盖.tfignore 父文件夹中文件的效果。

以下规则适用于.tfignore文件:

  • # 开始评论行
  • *和?支持通配符。
  • 除非以\字符为前缀,否则filespec是递归的。
  • !对filespec求反(不忽略与模式匹配的文件)

示例文件:

# 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

35
我已经尝试过了。唯一被忽略的是.tfignore文件的内容:(
user1852503 2014年

15
@SerjSagan我的电脑并没有让我创造.tfignore,所以我创建.tfignore.和删除它在自己的最后一个点..
彼得

5
问题在于它只忽略以下资源:1)在签入之前在Source Control Explorer窗口中明确删除的资源和2)在Pending Changes窗口中明确排除的资源。例如,如果要使用它来忽略程序包文件夹并依靠NuGet程序包还原,则需要1)在NuGet程序包还原过程之后,在Source Control Explorer中删除程序包文件夹,然后2)在“ 待更改”窗口中将其排除在外。否则,它仍将检入packages文件夹。
Deilan

1
如果Windows .tfignore由于缺少适当的名称而不允许您创建文件,则可以创建该文件或通过命令行窗口重命名该文件。
Zarepheth

1
VS2015中的.tfignore 存在一些主要问题。人们对此非常不满意,但是似乎没有明确说明该问题,也没有明确承诺解决该问题。
bbsimonbb '16

71

确实显得有些笨重Team Foundation Server中忽略文件(文件夹)。我发现了几种方法(使用TFS / Team Explorer / Visual Studio 2008)。这些方法也适用于网站的ASP项目类型。

一种方法是将新项目或现有项目添加到项目中(例如,右键单击项目,添加现有项目或从Windows资源管理器拖放到解决方案资源管理器中),让TFS处理文件或文件夹,然后撤消待处理物品的更改。TFS会将它们取消标记为具有挂起的添加更改,并且文件将安静地位于项目中,而不会进入TFS。

另一种方法是使用“源代码管理资源管理器”中的“将项目添加到文件夹”命令。这将启动一个小型向导,并且在其中一个步骤上,您可以选择要排除的项目(尽管我认为您必须使用此方法向TFS添加至少一个项目,向导才能继续操作)。

您甚至可以添加禁止模式检入策略(在“团队->团队项目设置->源代码管理...->检入策略下”),以防止团队中的其他人错误地检入某些资产。


7
我没有禁止使用的图案政策。对相关问题的答案揭示了从何处获得它。它显然是TFS电动工具的一部分
雷夫·卡尔森,

1
我正面临类似的问题,您能否提供特定文件夹的更多详细信息,以使用“
签到

糟糕-你是对的,雷夫。它是TFS电动工具的一部分。
德里克·莫里森

Imran,很不幸,我换了工作,不再使用TFS并且无法访问我以前的项目,因此我不确定禁止模式检入策略语法的语法。也许这个问题有帮助?stackoverflow.com/questions/2741412/…–
德里克·莫里森

TFS 2010选择要包含的文件后,可以从该列表中排除。无法触摸现有文件...
JNF

47

对于TFS 2013

在VisualStudioTeam Explorer中启动,在PendingChanges对话框中使用状态[add]撤消更改,应将其忽略。

Visual Studio将再次检测添加。在排除的更改中单击“检测到:x添加”

在打开的“促进候选者更改”对话框中,您可以使用上下文菜单轻松排除文件和文件夹。选项有:

  • 忽略此项目
  • 忽略扩展
  • 按文件名忽略
  • 通过ffolder忽略(是ffolder,TFS 2013 Update 4 / Visual Studio 2013 Premium Update 4)

不要忘记签入更改的.tfignore-File。

对于VS 2015/2017

相同的过程:在TeamExplorer \ Pending更改的“排除的更改选项卡”中,单击“检测到”:xxx add(s)

TeamExplorer \ Pending更改中的“排除的更改”选项卡

将打开“促进候选者更改”对话框,然后在条目上单击鼠标右键以打开上下文菜单。错字现已修复:-)


似乎找不到该选项。我正在使用VS 2015 RC。
Shimmy Weitzhandler,2015年

仅当您使用本地工作空间时,这才起作用,如此处详细描述:msdn.microsoft.com/library/vstudio/…
stvn

@Shimmy:VS 2015 RC中的过程相同,但错字仍然相同。请参阅我更新的答案。但是正如stvn所指出的,.tfignore仅适用于本地工作空间。对于服务器工作区,您必须撤消“待签入”中的“包含”,请参见此处的答案:stackoverflow.com/questions/21887308/…
GREX

@Shimmy:您是否已连接到TFS-Server 2015?确保从VS中的Team Explorer开始
gReX中的 2015年

@ qw1564我很确定,当首先问这个问题时,这是不可能的。但是现在,这就是我会选择的答案。感谢您的功劳!
gReX

5

我发现了像SVN一样忽略TFS中文件的完美方法。
首先,选择要忽略的文件(例如Web.config)。
现在转到菜单标签,然后选择:

文件源控件>高级>从源代码管理中排除web.config

...和繁荣;您的文件已从源代码管理中永久排除。


1
这在TFS 2010上为我工作,用于生成代码的文件。谢谢!
BozoJoe

1
这实际上有效,.tfignore对我不起作用。感谢吨
EpicKip

2
我在VS 2018中没有此选项
亚当

4

我假设您正在使用网站项目。它们会自动爬网其项目目录,并将所有内容放入源代码管理中。没有办法阻止他们。

但是,请不要绝望。Web应用程序项目不会表现出这种奇怪而出乎意料的(恕我直言:moronic)行为。WAP是VS2005的附加组件,而VS2008是直接提供的。

作为将项目更改为WAP的替代方法,您可以考虑将Assets文件夹移出Source控件,再移入TFS文档库。仅当项目本身不直接使用资产文件时才这样做。


是的,您的假设是正确的。我以为会这样,只是想加倍确定我什么都不会错过。
戴夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.