我正在尝试让TFS(2013)忽略我的packages
文件夹。我非常希望在使用NuGet时不要控制它的源代码,这太好了!
我尝试了伪装(似乎不起作用),我尝试了添加.tfignore
文件-不会忽略任何内容。为什么TFS团队不像许多Subversion客户端那样添加一个选项来永久忽略文件夹或文件?
我正在尝试让TFS(2013)忽略我的packages
文件夹。我非常希望在使用NuGet时不要控制它的源代码,这太好了!
我尝试了伪装(似乎不起作用),我尝试了添加.tfignore
文件-不会忽略任何内容。为什么TFS团队不像许多Subversion客户端那样添加一个选项来永久忽略文件夹或文件?
Answers:
解决方法是:我们必须告诉NuGet 和 TFS都忽略软件包,因为NuGet试图做绝对不应该做的与源代码控制相关的事情(不好的形式,微软!)。因此,您必须做两件事。
首先,添加一个名为文件.tfignore
到解决方案文件夹(注意缺少s
后tf
)。其内容应如下:
\packages
这告诉TFS忽略您的packages文件夹。现在,您会认为这也会忽略该repositories.config
文件。但是不会。为什么?谁知道,微软的方式是奇怪而神秘的。实际上,我认为这是我在下面概述的NuGet内容的一部分,但是如果以后修复了该问题,并且您希望保留repositories.config
文件而不是让VS重新生成它,则应该可以使用此文件:
\packages
!\packages\repositories.config
好的,现在感谢我们的.tfignore
文件,TFS将忽略您的软件包。一切都很好,对吧?错,因为NuGet正在与源代码管理混在一起,并将软件包添加到您的未决更改中。因此,现在让我们告诉NuGet已将其裁剪掉。
.nuget
在解决方案文件夹的根目录中创建一个名为的文件夹。1现在,创建一个名为的文件NuGet.config
,并将其放在此新文件夹2中。其内容应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>
而现在你的软件包应该留源失控。只需记住将NuGet.config
和.tfignore
文件添加到源代码管理中,这样它们就不会丢失。
编辑:如果您遇到问题,则可能要删除您的packages文件夹,签入该更改,然后执行上述步骤。
还编辑:看来新的Nuget版本不会发生这种情况。因此,如果您切换到VS / TFS 2017,则可能会解决此问题,而不必跳过上面的说明。
1。使用源代码管理资源管理器添加文件夹;右键单击解决方案->添加文件夹->。nuget
2。当我使用VS 2013弄清楚这一点时,我发现NuGet.config必须放在.nuget文件夹中。即使您的解决方案文件夹的根目录中已经有一个NuGet.config文件(例如,由于您的公司具有内部nuget提要)。但是,其中的一些注释表明它在VS 2015的解决方案根目录中可以正常工作。就我个人而言,我切换到在git模式下使用TFS,因此无法测试。此外,如果您确实有一个自定义提要,请确保同时将自定义提要和nuget.org都作为Nuget.config文件中的键,否则TFS有时会随机决定它无法还原软件包。
上面的替代解决方案如下。
值得注意的是,该解决方案将需要在每个TFS工作空间中应用。对于我来说,它比使用.tfignore
文件更加可靠。
您可以在博客文章“ 阻止TFS将已安装的NuGet软件包添加到源代码管理”中阅读有关此方法的更多信息。
对于报告.tfignore选项不适用于nuget.config设置的人们,可能对此很感兴趣-这些步骤终于对我有用:
在解决方案的.nuget文件夹中添加nuget.config文件。将以下内容添加到nuget.config文件中:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>
disableSourceControlIntegration是TFS版本控制的窍门。
您需要使用本地工作区.tfignore
才能工作。该.tfignore
文件必须位于包含要忽略的文件或文件夹的文件夹中。
因此,如果您的解决方案结构如下所示:
\Project
\Packages
\OtherStuff
foo.cs
您将.tfignore文件放在\ Project中:
\Project
\Packages
\OtherStuff
foo.cs
.tfignore
您的情况下.tfignore的内容为:
\packages
这是为您提供的一些文档:http : //msdn.microsoft.com/library/vstudio/ms245454(v=vs.110).aspx#tfignore
packages
而不是\packages
。
您可以AppData\Roaming
为所有解决方案(新旧)永久设置一次。
在%AppData%\NuGet\NuGet.Config
文件中,在</configuration>
XML标签之前添加以下内容...
<config>
<add key="repositoryPath" value="C:\NuGetPackages" />
</config>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
...您可以指定所需的任何路径-重要的是将其放置在TFS工作空间之外!
现在,您不必再担心这些东西。您的解决方案文件夹将不再包含任何软件包。所有解决方案将默认使用您的自定义软件包位置。
注意-此功能基于每个用户。
将您的解决方案设置为在构建时还原,软件包文件夹和软件包文件将被检入,但软件包不会被检入。
如果将Git与TFS一起使用,则需要添加“ .gitignore”文件。您可以在“团队项目|设置|'添加忽略文件'”中执行此操作。然后打开文件并取消注释Nuget Packages的内置ignore语句。
如果您使用的是TFVC,并且配置了本地工作区,则可以使用“ .tfignore”文件,该文件采用与Git文件相同的格式。我认为您需要“ packages /”。
在Visual Studio Online和VS2013上,这对我不起作用。
从其他评论看来,此时您的里程可能有所不同。这是我的工作:
检查所有内容,包括所有软件包。
删除解决方案中的所有软件包,然后签入此更改(这将从TFS中删除软件包)
打开解决方案并进行构建,这会将软件包添加到项目中,但是TFS不会将其提取。
对我有用的解决方案是在Nuget.Config中创建.tfignore 和以下设置:
<configuration>
...
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
...
</configuration>
我的.tfignore包含以下行:
\packages
[我正在使用Visual Studio 2015 Update 2]
这不是理想的,并且当前在github / nuget上记录为一个未解决的问题:
Terje的答案并非一直都对我有用,有时会持续一会儿,但随后又会给我带来很多“增加”的负担。
我找到永久解决此问题的唯一方法是在Workspace中隐藏“ packages”文件夹。
例如:
Type Server Local
============================================
Active $/Work/Main C:\Code\Main
Cloaked $/Work/Main/Packages
我遇到过同样的问题。/packages
应该可以,但是对我不适合。packages*.*
做过。