是否可以在TFS源代码控制中设置文件/文件夹以忽略每个项目?
例如,我有一个带有资产文件夹的网站,我不想进入源代码控制。这些资产由一个单独的系统维护。此外,我不想将几个gb的资产放入源代码控制中,但我需要在我的开发机器上放置几个示例,但我也不想签入它们。
如果我在绑定源代码控制的同时在这个网站上工作,并且我刷新了树,这些文件将自动再次添加
我想阻止这种事发生。
是否可以在TFS源代码控制中设置文件/文件夹以忽略每个项目?
例如,我有一个带有资产文件夹的网站,我不想进入源代码控制。这些资产由一个单独的系统维护。此外,我不想将几个gb的资产放入源代码控制中,但我需要在我的开发机器上放置几个示例,但我也不想签入它们。
如果我在绑定源代码控制的同时在这个网站上工作,并且我刷新了树,这些文件将自动再次添加
我想阻止这种事发生。
当前回答
我假设您正在使用Web站点项目。它们会自动抓取项目目录,并将所有内容放入源代码控制中。没有办法阻止他们。
然而,不要绝望。Web应用程序项目没有表现出这种奇怪的和相当出乎意料的(恕我直言:低能)行为。WAP是VS2005的一个插件,直接与VS2008一起提供。
作为将项目更改为WAP的替代方案,您可以考虑将Assets文件夹移出源代码控制并移到TFS文档库中。只有在项目本身不直接使用资产文件时才这样做。
其他回答
忽略Team Foundation Server中的文件(和文件夹)似乎有点麻烦。我找到了一些方法来做到这一点(使用TFS / Team Explorer / Visual Studio 2008)。这些方法也适用于网站的ASP项目类型。
一种方法是向项目中添加一个新的或现有的项(例如右键单击项目,添加现有项或从Windows资源管理器拖放到解决方案资源管理器中),让TFS处理文件或文件夹,然后撤消对该项的挂起更改。TFS将取消将它们标记为有一个挂起的添加更改,这些文件将安静地保存在项目中,不受TFS的影响。
另一种方法是使用源代码管理资源管理器的“将项目添加到文件夹”命令。这将启动一个小向导,在其中一个步骤中,您可以选择要排除的项(不过,我认为您必须使用此方法向TFS添加至少一个项,以便向导允许您继续)。
您甚至可以添加一个禁止模式签入策略(在团队->团队项目设置->源代码控制…->签入策略)不允许团队中的其他人错误地签入某些资产。
适用于VS2015和VS2017
使用TFS (on-prem)或VSO (Visual Studio Online - azure托管的产品)
NuGet文档提供了如何实现这一点的说明,我只是成功地使用了Visual Studio 2015和Visual Studio 2017对抗VSTS (azure托管的TFS)。所有内容都在2016年11月至2018年8月全面更新。
我建议你遵循NuGet的说明,但只是回顾一下我所做的:
Make sure your packages folder is not committed to TFS. If it is, get it out of there. Everything else we create below goes into the same folder that your .sln file exists in unless otherwise specified (NuGet's instructions aren't completely clear on this). Create a .nuget folder. You can use Windows Explorer to name it .nuget. for it to successfully save as .nuget (it automatically removes the last period) but directly trying to name it .nuget may not work (you may get an error or it may change the name, depending on your version of Windows). Or name the directory nuget, and open the parent directory in command line prompt. type. ren nuget .nuget Inside of that folder, create a NuGet.config file and add the following contents and save it:
NuGet.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>
回到你的。sln文件夹,创建一个新的文本文件,命名为。tfignore(如果使用Windows资源管理器,使用相同的技巧,命名为。tfignore)。 将以下内容放入该文件:
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
保存所有这些文件,将其提交到TFS,然后关闭并重新打开Visual Studio,团队资源管理器应该不再将包文件夹标识为待签入。 通过Windows资源管理器复制/粘贴.tfignore文件和.nuget文件夹到我所有的各种解决方案,并提交它们,我不再有包文件夹试图潜入我的源代码控制回购!
进一步定制
虽然不是我的,但我发现sirkirby的.tfignore模板很方便。在我的回答的例子涵盖了Nuget包文件夹,但这个模板包括一些其他的东西,以及提供了额外的例子,可以是有用的,如果你希望自定义进一步。
我发现了像SVN一样忽略TFS文件的完美方法。 首先,选择你想要忽略的文件(例如Web.config)。 现在转到菜单选项卡,选择:
文件源控制>高级>排除web。从源代码控制配置
…和繁荣;您的文件将被永久排除在源代码控制之外。
我假设您正在使用Web站点项目。它们会自动抓取项目目录,并将所有内容放入源代码控制中。没有办法阻止他们。
然而,不要绝望。Web应用程序项目没有表现出这种奇怪的和相当出乎意料的(恕我直言:低能)行为。WAP是VS2005的一个插件,直接与VS2008一起提供。
作为将项目更改为WAP的替代方案,您可以考虑将Assets文件夹移出源代码控制并移到TFS文档库中。只有在项目本身不直接使用资产文件时才这样做。
如果你正在使用本地工作区(TFS 2012+),你现在可以使用.tfignore文件来排除本地文件夹和文件的签入。
如果将该文件添加到源代码控制,则可以确保团队中的其他人共享相同的排除设置。
MSDN - http://msdn.microsoft.com/en-us/library/ms245454.aspx#tfignore的详细信息
对于懒人:
You can configure which kinds of files are ignored by placing a text file called .tfignore in the folder where you want rules to apply. The effects of the .tfignore file are recursive. However, you can create .tfignore files in sub-folders to override the effects of a .tfignore file in a parent folder. The following rules apply to a .tfignore file: # begins a comment line The * and ? wildcards are supported. A filespec is recursive unless prefixed by the \ character. ! negates a filespec (files that match the pattern are not ignored)
示例文件:
# 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