让 TFS 忽略我的包文件夹
Posted
技术标签:
【中文标题】让 TFS 忽略我的包文件夹【英文标题】:Get TFS to ignore my packages folder 【发布时间】:2014-07-31 09:20:25 【问题描述】:我正在尝试让 TFS (2013) 忽略我的 packages
文件夹。我非常不希望它受到源代码控制,因为我正在使用 NuGet,它很棒!
我尝试过隐藏(似乎不起作用),我尝试过添加 .tfignore
文件 - 没有任何内容被忽略。为什么 TFS 团队不像许多 Subversion 客户端那样添加一个永久忽略文件夹或文件的选项?!
【问题讨论】:
您使用的是什么版本的 TFS 和 Visual Studio?您使用的是本地工作区还是服务器工作区? 显然是 NuGet 错误:docs.nuget.org/docs/reference/package-restore-with-team-build tfIgnore does not work for me in Visual Studio 2013的可能重复 你应该改变这个问题的答案 如果您使用的是 NuGet,则需要 packages 文件夹。您可以将 NuGet 设置为在构建时恢复丢失的二进制文件(以便您对包文件夹进行源代码控制,但忽略二进制文件)。 -- 但是有这样的问题:NuGet 二进制文件有可能被更新(不改变版本号),或者被删除等等。 -- 各种奇怪的怪事都有可能发生。不要让你的构建碰运气——检查整个包文件夹。你会省去很多麻烦。 【参考方案1】:这是交易:我们必须告诉 NuGet 和 TFS 忽略这些包,因为 NuGet 正在尝试做它绝对不应该做的与源代码控制相关的事情(糟糕的形式,微软!)。所以你必须做两件事。
首先,将名为.tfignore
的文件添加到解决方案文件夹(注意tf
后面缺少s
)。其内容应如下:
\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 似乎不会发生这种情况。因此,如果您切换到 VS/TFS 2017,这个问题可能会得到解决,而无需跳过上述障碍。
1。使用源代码管理资源管理器添加文件夹;右键单击解决方案->添加文件夹->.nuget2。当我使用 VS 2013 解决这个问题时,我发现 NuGet.config 必须放在 .nuget 文件夹中。即使您的解决方案文件夹的根目录中已经有一个 NuGet.config 文件(因为,比如说,您的公司有一个内部 nuget 提要)。但是,cmets 中的一些人表示它在 VS 2015 的解决方案根目录中运行良好。就我个人而言,我切换到在 git 模式下使用 TFS,所以我无法测试。此外,如果您确实有自定义提要,请确保将自定义提要和 nuget.org 作为 Nuget.config 文件中的键,否则有时 TFS 会随机决定它无法恢复包。
【讨论】:
我相信这至少需要 TFS 2012。 ***.com/questions/14365929/… @zespri 什么文件正在等待删除? NuGet 包?那不应该等待删除......它应该被删除!完成我上面建议的操作后,转到 Team Explorer 并删除所有可能已经在源代码管理中的 Nuget 包。或者干脆完全删除包文件夹。我已经使用这个设置好几个月了,从来没有遇到过这个错误。 在 VS2015 中仅供参考,nuget.config not 必须在 /.nuget/ 中。它在解决方案根目录中效果很好。 对于想知道如何创建以句点开头的文件夹和文件的人,请以另一个句点结束名称。所以那将是.tfignore。和 .nuget。 @DerekZiemba 绝招!这些年来,我一直在通过命令行进行操作。我认为值得一提的是,当你这样做时,尾随的 '.'将被删除,我最初认为您的建议是只使用额外的“。”最后。【参考方案2】:上述问题的替代解决方案如下。
将包文件夹添加到 TFS(不包含任何文件或子文件夹) 右键单击 Packages 文件夹 左键单击高级 点击披风值得注意的是,需要针对每个 TFS 工作区应用此解决方案。它对我来说比使用.tfignore
文件要可靠得多。
您可以在博客文章Prevent TFS from adding installed NuGet packages to source control 中阅读有关此方法的更多信息。
【讨论】:
【参考方案3】:对于报告 .tfignore 选项无法与 nuget.config 设置一起使用的人来说,这可能会引起人们的兴趣 - 这些步骤最终对我有用:
-
删除我的包文件夹中的所有内容
确保 TFS 对该文件夹没有任何待处理的更改
关闭VS
重新打开 VS 并重新加载解决方案 - 使用 Nuget 还原重新填充
包 注意 TFS 源代码控制没有待处理的更改
【讨论】:
这在应用 Pharylon 的解决方案后对我有用,这是我在恢复包后所做的。 真的很有帮助,我们必须在初始时间(第一次将 .tfignore 文件提交到 TFS)执行此操作,但不是每个人都这样做。如果我是正确的。 我认为这种方法只适用于制作斗篷的机器。我说的对吗?所以这并不能解决所有团队成员的根本问题。 这对我有用——我确保包中的任何内容都没有提交,然后从磁盘中删除包目录。此时,它仍然在 VS 团队资源管理器中显示为待处理的更改,因此我选择撤消包目录中待处理的更改。这清理了它(我不需要关闭/重新打开),他们不会回来=)【参考方案4】:在解决方案的 .nuget 文件夹中添加一个 nuget.config 文件。 将以下内容添加到 nuget.config 文件中:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>
disableSourceControlIntegration 是 TFS 版本控制的诀窍。
【讨论】:
没有效果 - 也根本不是全局解决方案。 @So Many Goblins:你有没有在一个全新的项目/sln 上尝试过这个? (只是为了检查一下)我很好奇你的设置中的什么使它不起作用,因为它每次我自己做时都会起作用,这是推荐的使用 TFS/nuget 的方法。另外,您在哪个版本的 VS/TFS 上看到了这个? Visual Studio 2013。新的解决方案,是的。我解决了这个问题,添加了一个 .tfignore 显式忽略每个包。 好的,这实际上就是“启用 NuGet 包还原”的作用。请务必关闭并重新打开您的解决方案!只有在打开您的解决方案时才会读取 NuGet.config 文件。 这在visual studio online和VS2013上对我来说不太适用。我使用右键单击解决方案 > 启用 NuGet 包还原。这会将 Nuget.config 文件添加到解决方案根目录添加 .tfignore。我通常通过将文本文件添加到解决方案根目录,让它检测到,然后通过单击“检测到的添加”> 右键单击忽略来排除。然后签入所有内容,包括任何包然后删除解决方案中的所有包并签入此更改(这将从 TFS 中删除包)打开解决方案并构建它将添加包但 TFS 不会拾取它们。跨度> 【参考方案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。我似乎无法阻止它。 您可以发布您添加的忽略文件吗? 请参阅docs.nuget.org/docs/reference/package-restore-with-team-build - 这是 .tfignore 的 NuGet 错误,但可以通过告诉 NuGet 自行进行 SCM 集成来纠正。 看起来你的例子可能是错误的,它认为它应该是packages
而不是\packages
,因为它是相对的。【参考方案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 工作区之外!
现在您再也不必担心这些事情了。您的解决方案文件夹将不再包含任何包;所有解决方案都将默认使用您的自定义包位置。
注意 - 这是基于每个用户的。
【讨论】:
听起来不错,而且可能更简单。如果您采用这种方法,您是否必须在整个团队中强制执行此设置,尤其是构建服务器的登录/设置? 我想是的。抱歉,我没有测试过这个 WRT 构建服务器。我还想象到 lib 文件夹的不同文件夹路径可能会导致问题(如果我没记错的话,我认为一些 NuGet 包对 lib 路径有硬引用)。【参考方案7】:将您的解决方案设置为在构建时恢复,包文件夹和包文件将被签入,但包不会。
【讨论】:
请解释“restore on build”。 从 NuGet 2.7 开始,不推荐使用 Visual Studio 右键单击“启用 NuGet 包还原”功能 -- TFS 2013 本身支持在没有 NuGet.targets 文件和修改 proj 文件的情况下还原 NuGet 包。 【参考方案8】:如果您使用带有 TFS 的 Git,您需要添加一个“.gitignore”文件。您可以在“团队项目|设置|'添加忽略文件'”中执行此操作。然后打开文件并取消注释 Nuget 包的内置忽略语句。
如果您使用 TFVC 并且配置了本地工作区,则可以使用“.tfignore”文件,该文件采用与 Git 文件相同的格式。我认为你需要“packages/”。
【讨论】:
我们使用 TFSVC,正如最初的帖子中已经提到的那样 - .tfignore 文件无法正常工作。 正如我所说,您需要使用正确的 .tfignore 格式。我相信你的斜线弄错了 @MrHinsh 在与 Ed Thompson 交谈后,.tfignore 文件无法正常工作。 .gitignore 可以。 @Ed 需要解决这个问题 ;)【参考方案9】:这在视觉工作室在线和 VS2013 上对我来说不太适用。
右键单击解决方案 > 启用 NuGet 包还原。这会将 Nuget.config 文件添加到解决方案中 添加 .tfignore。我通常通过将文本文件添加到解决方案根目录,让它检测到,然后通过单击“检测到的添加”> 右键单击忽略来排除。 将包添加到 .tfignore 并告诉它包含 repositories.config从其他 cmets 看来,此时您的里程数可能会有所不同。我就是这样做的:
检查所有内容,包括所有包裹。
删除解决方案中的所有包,然后签入此更改(这将从 TFS 中删除包)
打开解决方案并构建,这会将包添加到项目中,但 TFS 不会提取它们。
【讨论】:
首先,启用 Nuget 还原已被弃用,如果您稍后走这条路线,则在 VS 2015 中不存在。第二:签入包和 dll 会将它们添加到源代码管理中,在解决方案中删除它们并签入不会将它们从 SC 中删除,只是从分支的尖端。 —— @TerjeSandstrøm 点,但问题是 2013 年特有的。是的,你是对的,你必须使用 tf destroy 将其从源代码控制中永久删除,但我发现没有其他方法可以获取 TFS遵守 .tfignore 文件【参考方案10】:对我有用的解决方案是在 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
【讨论】:
【参考方案11】:Terje 的 answer 对我来说并非一直有效,有时它会工作一段时间,但随后它会再次为我等待大量“添加”。
我发现永久解决此问题的唯一方法是隐藏我工作区中的包文件夹。
例如:
Type Server Local
============================================
Active $/Work/Main C:\Code\Main
Cloaked $/Work/Main/Packages
【讨论】:
这很奇怪。最新的 Visual Studio 和 NuGet 版本会发生这种情况吗? 是的,我在 TFS 2012 本地工作区上运行 VS 2013.4 和 NuGet 2.8。 你必须为几十个项目和污染隐藏每个包文件夹。此外,团队的每个成员都必须为每个工作区重复该过程 斗篷不是一个好的答案,上面的另外两个答案是设计的。您的环境中一定有其他事情发生。 @MrHinsh - 该部门的很多人都看过这个,它只是坏了。使用 Git 似乎没问题,但使用 TFVC 时它一直这样做。【参考方案12】:我遇到了同样的问题。 /packages
应该可以,但不适合我。 packages*.*
确实有效。
【讨论】:
以上是关于让 TFS 忽略我的包文件夹的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Azure DevOps / TFS 中忽略了我的 repositoryPath?
TFS MSBuild 不为解决方案中的网站恢复 nugets
Visual Studio 2015 TFS .tfignore 文件