我正在尝试让TFS(2013)忽略我的packages文件夹。我非常希望它不受源代码控制,因为我正在使用NuGet,这太好了!

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

评论

您正在使用什么版本的TFS和Visual Studio?您正在使用本地工作区还是服务器工作区?

这显然是一个NuGet错误:docs.nuget.org/docs/reference/package-restore-with-team-build

tfIgnore的可能重复项在Visual Studio 2013中对我不起作用

您应该更改此问题的答案

如果您使用的是NuGet,则需要packages文件夹。您可以将NuGet设置为还原构建时丢失的二进制文件(以便您对软件包文件夹进行源代码控制,但忽略二进制文件)。 -但是有一个问题:NuGet二进制文件有可能被更新(版本号未更改)或被删除等。-各种奇怪的奇怪事情都有可能发生。不要让您的构建遇到麻烦-检入整个package文件夹。您会省去很多麻烦。

#1 楼

解决方法是:我们必须告诉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.使用源代码管理资源管理器添加文件夹;右键单击解决方案->添加文件夹->。nuget2。当我使用VS 2013弄清楚这一点时,我发现NuGet.config必须放在.nuget文件夹中。即使您的解决方案文件夹的根目录中已经有一个NuGet.config文件(例如,因为您的公司具有内部nuget提要)。但是,其中的一些注释表明它在VS 2015的解决方案根目录中可以正常工作。就我个人而言,我切换为在git模式下使用TFS,因此无法测试。此外,如果您确实有自定义供稿,请确保在Nuget.config文件中同时具有自定义供稿和nuget.org作为密钥,否则TFS有时会随机决定它无法还原软件包。

评论


我认为这至少需要TFS 2012。 stackoverflow.com/questions/14365929 / ...

– ClearCloud8
15年5月11日在22:01

@zespri什么文件正在等待删除? NuGet包?那不应该等待删除...应该删除!完成上述建议后,转到Team Explorer并删除可能已经在源代码控制中的所有Nuget程序包。或者只是完全删除packages文件夹。我已经使用此设置几个月了,从未遇到过该错误。

– Pharylon
2015年5月29日19:19



在VS2015中,nuget.config不必在/.nuget/中。它在解决方案的根目录下效果很好。

– jnm2
15年11月25日在18:50



对于想知道如何创建以句点开头的文件夹和文件的任何人,请以另一个句点结尾。因此,它将是.tfignore。和.nuget。

–德里克·齐姆巴(Derek Ziemba)
16年1月6日在20:42

@DerekZiemba整洁的把戏!这些年来,我一直在命令行中进行操作。我认为值得一提的是,当您这样做时,尾随“。”。会被删除,我最初以为您的建议是再加上一个'。最后。

–user170934
16年1月11日在16:22

#2 楼

下面是上述解决方案的替代方案。


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

值得注意的是,此解决方案需要在每个TFS工作空间中应用。与使用.tfignore文件相比,它对我而言更加可靠。

您可以在博客文章阻止TFS将已安装的NuGet程序包添加到源代码控制中来了解有关此方法的更多信息。

#3 楼

对于报告.tfignore选项不能与nuget.config设置一起使用的人们来说,它可能很有趣-这些步骤终于对我有用:


删除包文件夹中的所有内容
确保TFS在该文件夹附近没有任何更改
关闭VS
重新打开VS,并重新加载解决方案-使用Nuget restore重新填充
程序包请注意没有更改正在等待TFS源代码控制


评论


在应用Pharylon的解决方案后,这对我有用,而在恢复软件包之后,我这样做了。

–user849924
2015年9月7日在9:36

确实很有帮助,我们必须在初始时间(将.tfignore文件首次提交到TFS)中执行此操作,但不是每个人都这样做。如果我是正确的。

–RajeshKdev
16 Dec 29'在10:53

我认为这种方法仅适用于制造披风的机器。我是对的吗?因此,这并不能解决所有团队成员的根本问题。

– panox
17年11月24日在15:14

这对我来说很有效-我确保Packages中的所有内容都没有提交,然后从磁盘上删除了packages目录。此时,它在VS团队资源管理器中仍显示为待处理的更改,因此我选择撤消包目录中待处理的更改。这清理了它(不需要我关闭/重新打开),并且它们没有回来=)

– frax
18年8月20日在17:54

#4 楼

在解决方案的.nuget文件夹中添加nuget.config文件。
将以下内容添加到nuget.config文件中:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>


disableSourceControlIntegration是什么TFS版本控制的窍门。

评论


无效-根本不是全局解决方案。

–贾斯特
2014年10月30日15:49

@这么多哥布林:您是否在一个全新的项目/ sln上尝试过此方法? (仅用于检查)我很好奇您的设置中有什么使它不起作用,因为每次我自己做时它都起作用,这是使用TFS / nuget的推荐方法。另外,您看到哪个版本的VS / TFS?

–特里·桑德斯特罗姆(TerjeSandstrøm)
2015年1月10日在20:14

Visual Studio2013。新解决方案,是的。我解决了此问题,添加了一个.tfignore,显式地忽略了每个程序包。

–地精很多
2015年1月11日在22:06

好的,这实际上是“启用NuGet软件包还原”的功能。只要确保关闭并重新打开您的解决方案即可!仅在打开解决方案时才会读取NuGet.config文件。

–里加德·史坦(Riegardt Steyn)
15年3月24日在8:09

在Visual Studio Online和VS2013上,这对我不太有效。我使用了右键单击解决方案>启用NuGet软件包还原。这会将Nuget.config文件添加到解决方案根目录。.tfignore。我通常通过在解决方案的根目录中添加一个文本文件来做到这一点,让它检测到该问题,然后通过单击“检测到的添加”>右键单击忽略来排除。然后检入所有内容,包括所有软件包,然后删除解决方案中的所有软件包并进行此更改(这将从TFS中删除软件包)。打开解决方案并进行构建,它将添加软件包,但TFS不会提取它们。

–大卫·威尔顿(David Wilton)
15年7月16日在10:38

#5 楼

您需要使用本地工作区才能使.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

评论


我已经添加了.tfignore文件,并且在构建项目时,它仍在尝试向tfs中添加软件包。我似乎无能为力。

–马特
2014年6月11日8:37

您可以发布添加的忽略文件吗?

– MrHinsh-马丁·欣希尔伍德
14年6月13日在17:26

请参阅docs.nuget.org/docs/reference/package-restore-with-team-build-这是.tfignore的NuGet错误,但可以通过指示NuGet自行进行SCM集成来纠正。

–user2864740
2014年12月29日在22:01

看起来您的示例可能是错误的,它认为应该是包而不是\ packages,因为它是相对的。

–马丁
15年2月21日在17:53

#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工作空间之外!

现在您不必担心这一点东西。您的解决方案文件夹将不再包含任何软件包。所有解决方案都将默认使用您的自定义软件包位置。

注意-这项工作基于每个用户。

评论


听起来不错,可能更简单。如果采用这种方法,您确实必须在整个团队中强制执行此设置,尤其是构建服务器的登录/设置。

–克里斯·卡罗尔(Chris F Carroll)
16年1月11日在16:21

我会这样想。抱歉,我尚未测试此WRT构建服务器。我也可以想象到lib文件夹的不同文件夹路径可能会引起问题(如果我记得正确的话,我认为某些NuGet软件包对lib路径具有硬引用)。

–里加德·史坦(Riegardt Steyn)
16 Jan 12'在9:56



#7 楼

将您的解决方案设置为在构建时还原,软件包文件夹和软件包文件将被检入,但软件包不会被检入。

评论


请说明“在构建时还原”。

–user2864740
2014年12月29日在21:49

从NuGet 2.7开始,不建议使用Visual Studio右键单击“启用NuGet软件包还原”功能-TFS 2013本机支持在没有NuGet.targets文件和proj文件的修改的情况下还原NuGet软件包。

–丹尼尔·曼(Daniel Mann)
2014-12-29 22:33



#8 楼

如果将Git与TFS一起使用,则需要添加“ .gitignore”文件。您可以在“团队项目|设置|'添加忽略文件'”中执行此操作。然后打开文件,并取消注释Nuget Packages的内置ignore语句。

如果您使用的是TFVC,并且配置了本地工作区,则可以使用“ .tfignore”文件,该文件采用与.getfignore相同的格式。 Git文件。我认为您需要“ packages /”。

评论


我们使用了TFSVC,并且正如在最初的帖子中已经提到的-.tfignore文件不起作用。

–贾斯特
2014年10月30日在8:40

如我所说,您需要使用正确的.tfignore格式。我相信您的做法是错误的

– MrHinsh-马丁·欣希尔伍德
14-10-30在13:11

@MrHinsh与Ed Thompson交谈后,.tfignore文件无法正常工作。 .gitignore可以。

– DaveShaw
2014年11月7日在21:59

@Ed需要修复它;)

– MrHinsh-马丁·欣希尔伍德
2014年11月8日20:45

#9 楼

在Visual Studio Online和VS2013上,这对我不太有效。


右键单击“解决方案”>“启用NuGet软件包还原”。这会将Nuget.config文件添加到解决方案




添加.tfignore。我通常通过在解决方案的根目录中添加一个文本文件来做到这一点,让它检测到该问题,然后通过单击“检测到的添加”>右键单击忽略来排除。




将软件包添加到.tfignore中,并告诉它包括存储库。config



/>从其他评论看来,您的里程可能会有所不同。这就是我的工作:


检查所有内容,包括任何程序包。
删除解决方案中的所有程序包,然后签入此更改(这将从TFS中删除程序包)
打开解决方案并进行构建,该解决方案会将软件包添加到项目中,但是TFS不会将其提取。


评论


首先,Enable Nuget restore已弃用,如果您稍后再使用,则在VS 2015中不存在。第二:检入其中的软件包和dll将把它们添加到源代码管理中,在解决方案中将其删除,并且检入in不会仅从分支的尖端将它们从SC中删除。 –

–特里·桑德斯特罗姆(TerjeSandstrøm)
15年7月16日在14:49

@TerjeSandstrøm要点,但问题仅针对2013。是的,您是对的,您必须使用tf destroy将其从源代码管理中永久删除,但是我发现没有其他方法可以使TFS遵守.tfignore文件。

–大卫·威尔顿(David Wilton)
15年7月22日在4:57

#10 楼

对我有用的解决方案是在Nuget.Config中创建.tfignore和以下设置:

<configuration>
  ...
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>  
  ...
</configuration>


我的.tfignore包含以下行:

\packages


[我正在使用Visual Studio 2015 Update 2]

,这并不理想,目前已在github / nuget上记录为未解决的问题:

更容易省略TFVC#493中的软件包

#11 楼

Terje的答案并非一直都对我有用,有时会持续一会儿,但之后又会给我再加一遍“加法”。

我唯一的办法发现永久解决此问题的方法是在我的工作区中隐藏“ packages”文件夹。例如,

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


评论


那太奇怪了。最新的Visual Studio和NuGet版本会发生这种情况吗?

–特里·桑德斯特罗姆(TerjeSandstrøm)
2014年10月28日在21:10

是的,我在TFS 2012本地工作区上运行VS 2013.4和NuGet 2.8。

– DaveShaw
14-10-29在9:46

您必须掩盖每个程序包文件夹才能获得数十个项目和污染。此外,团队的每个成员都必须对每个工作区重复该过程

–贾斯特
14-10-30在8:38

斗篷不是一个好的答案,上面的其他两个答案是有效的,并且是设计使然。您的环境中肯定还有其他事情正在发生。

– MrHinsh-马丁·欣希尔伍德
14-10-30在13:14

@MrHinsh-部门中的许多人都已经看过了,它已经坏了。使用Git似乎还可以,但是在使用TFVC时,它总是会这样做。

– DaveShaw
14-10-30在13:49

#12 楼

我遇到过同样的问题。 /packages应该可以工作,但对我来说不是。 packages*.*确实有效。