获取TFS以忽略我的包文件夹

时间:2014-06-10 14:43:50

标签: tfs nuget

我试图让TFS(2013)忽略我的packages文件夹。我热情地希望它不受源控制,因为我使用的是NuGet并且非常棒!

我尝试过伪装(似乎没有效果),我尝试添加.tfignore个文件 - 没有任何内容被忽略。为什么不让TFS团队添加一个选项来永久忽略像许多Subversion客户端那样的文件夹或文件?!

12 个答案:

答案 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)

以上的替代解决方案如下。

  • 将packages文件夹添加到TFS(不包含任何文件或子文件夹)
  • 右键单击Packages文件夹
  • 左键单击高级
  • 点击Cloak

值得注意的是,每个TFS工作区都需要应用此解决方案。它对我来说更可靠,而不是使用.tfignore文件。

您可以在博客文章Prevent TFS from adding installed NuGet packages to source control中详细了解此方法。

答案 2 :(得分:21)

对于报告.tfignore选项未使用nuget.config设置的人来说,这可能是有意义的 - 这些步骤最终对我有用:

  1. 删除我的包文件夹中的所有内容
  2. 确保TFS没有对该文件夹进行任何更改
  3. 关闭VS
  4. 重新打开VS,并重新加载解决方案 - 使用Nuget restore重新填充 包注意TFS源代码控制没有待处理的更改

答案 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上都不起作用。

  • 右键点击解决方案&gt;启用NuGet包还原。这会将Nuget.config文件添加到解决方案

enter image description here

  • 添加.tfignore。我通常通过向解决方案根添加文本文件来执行此操作,让它检测到该文件,然后通过单击“检测到的添加”&gt;进行排除。右键单击忽略。

enter image description here

  • 将软件包添加到.tfignore并告诉它包含repositories.config

enter image description here

从其他评论看,你的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上记录为未解决的问题:

Make it easier to omit packages from TFVC #493

答案 10 :(得分:0)

Terje的answer对我来说不起作用,有时它会工作一段时间,但是它会为我重新加上一些“补充”。

我发现永久解决这个问题的唯一方法是隐藏我的工作区中的packages文件夹。

例如:

Type      Server                Local
============================================
Active    $/Work/Main           C:\Code\Main
Cloaked   $/Work/Main/Packages

答案 11 :(得分:0)

我有同样的问题。 /packages应该有效,但对我来说并不适用。 packages*.*确实有效。