我试图让TFS(2013)忽略我的packages
文件夹。我热情地希望它不受源控制,因为我使用的是NuGet并且非常棒!
我尝试过伪装(似乎没有效果),我尝试添加.tfignore
个文件 - 没有任何内容被忽略。为什么不让TFS团队添加一个选项来永久忽略像许多Subversion客户端那样的文件夹或文件?!
答案 0 :(得分:474)
这里的交易:我们必须告诉NuGet 和 TFS忽略这些包,因为NuGet正在尝试做与源代码控制相关的东西,它绝对不应该这样做正在做(糟糕的形式,微软!)。所以你必须做两件事。
NuGet.config
首先,将一个名为.tfignore
的文件添加到解决方案文件夹中(注意s
之后缺少tf
。其内容应如下:
\packages
告诉TFS忽略你的包文件夹。现在,您将认为这也会忽略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
文件添加到源代码管理中,这样就不会丢失。
编辑:如果您遇到问题,可能需要删除自己的包文件夹,签入该更改,然后执行上述步骤。
另外编辑:看起来新版本的Nuget不会发生这种情况。因此,如果您切换到2017年的VS / TFS,这个问题将会在没有跳过上述环节的情况下解决。
<子> <强> 1 即可。使用Source Control Explorer添加文件夹;右键单击解决方案 - >添加文件夹 - > .nuget
<子> <强> 2 即可。当我使用VS 2013解决这个问题时,我发现NuGet.config必须进入.nuget文件夹。即使您已经在解决方案文件夹的根目录中有一个NuGet.config文件(因为,例如,您的公司有一个内部nuget订阅源)。但是,评论中的一些人表示它在VS 2015的解决方案根目录中工作正常。就个人而言,我转而在git模式下使用TFS,所以我无法测试。此外,如果您确实有自定义Feed,请确保您将自定义Feed和nuget.org都作为Nuget.config文件中的键,或者有时TFS会随机决定它无法恢复程序包。
答案 1 :(得分:51)
以上的替代解决方案如下。
值得注意的是,每个TFS工作区都需要应用此解决方案。它对我来说更可靠,而不是使用.tfignore
文件。
您可以在博客文章Prevent TFS from adding installed NuGet packages to source control中详细了解此方法。
答案 2 :(得分:21)
对于报告.tfignore选项未使用nuget.config设置的人来说,这可能是有意义的 - 这些步骤最终对我有用:
答案 3 :(得分:8)
在解决方案的.nuget文件夹中添加nuget.config文件。 将以下内容添加到nuget.config文件中:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>
disableSourceControlIntegration是TFS版本控制的技巧。
答案 4 :(得分:7)
您需要使用.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
答案 5 :(得分:6)
您可以在AppData\Roaming
中为所有解决方案(旧版和新版)永久设置此一次!
在%AppData%\NuGet\NuGet.Config
文件中,在</configuration>
XML标记之前添加以下内容...
<config>
<add key="repositoryPath" value="C:\NuGetPackages" />
</config>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
...你可以指定你想要的任何路径 - 重要的是将它放在你的TFS工作区外面!
现在你再也不用担心那些东西了。您的解决方案文件夹将不再包含任何包;所有解决方案都将默认使用您的自定义软件包位置。
注意 - 此作品基于每个用户。
答案 6 :(得分:2)
将您的解决方案设置为在构建时恢复,将检入包文件夹和包文件,但包裹不会被激活。
答案 7 :(得分:1)
如果您在GFS中使用TFS,则需要添加“.gitignore”文件。您可以在“团队项目|设置|'添加忽略文件'”中执行此操作。然后打开文件并取消注释Nuget Packages的内置ignore语句。
如果您使用的是TFVC并且配置了本地工作区,则可以使用符合Git文件相同格式的“.tfignore”文件。我想你需要“packages /".
答案 8 :(得分:1)
这对我在网上视觉工作室和VS2013上都不起作用。
从其他评论看,你的milage可能会在这一点上有所不同。这就是我的工作:
检查所有内容,包括任何包裹。
删除解决方案中的所有软件包,然后检查此更改(这将从TFS中删除软件包)
打开解决方案并构建将软件包添加到项目中,但TFS不会接收它们。
答案 9 :(得分:1)
对我有用的解决方案是在Nuget.Config中创建.tfignore 和以下设置:
<configuration>
...
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
...
</configuration>
我的.tfignore包含这一行:
\packages
[我使用的是Visual Studio 2015 Update 2]
这不太理想,目前在github / nuget上记录为未解决的问题:
答案 10 :(得分:0)
Terje的answer对我来说不起作用,有时它会工作一段时间,但是它会为我重新加上一些“补充”。
我发现永久解决这个问题的唯一方法是隐藏我的工作区中的packages文件夹。
例如:
Type Server Local
============================================
Active $/Work/Main C:\Code\Main
Cloaked $/Work/Main/Packages
答案 11 :(得分:0)
我有同样的问题。 /packages
应该有效,但对我来说并不适用。 packages*.*
确实有效。