ChatGPT解决这个技术问题 Extra ChatGPT

让 TFS 忽略我的包文件夹

我试图让 TFS (2013) 忽略我的 packages 文件夹。我非常不想让它受源代码控制,因为我正在使用 NuGet,它很棒!

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

您使用的是什么版本的 TFS 和 Visual Studio?您使用的是本地工作区还是服务器工作区?
你应该改变这个问题的答案
如果您使用的是 NuGet,则需要 packages 文件夹。您可以将 NuGet 设置为在构建时恢复丢失的二进制文件(以便对包文件夹进行源代码控制,但忽略二进制文件)。 -- 但是有这样的问题:NuGet 二进制文件有可能被更新(不改变版本号),或者被删除,等等。 -- 各种奇怪的怪事都有可能发生。不要让你的构建碰运气——检查整个包文件夹。你会省去很多麻烦。

P
Pharylon

交易是这样的:我们必须告诉 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. 使用 Source Control Explorer 添加文件夹;右键单击解决方案->添加文件夹->.nuget 2. 当我使用 VS 2013 解决这个问题时,我发现 NuGet.config 必须放在 .nuget 文件夹中。即使您的解决方案文件夹的根目录中已经有一个 NuGet.config 文件(因为,比如说,您的公司有一个内部 nuget 提要)。但是,评论中的一些人表示它在 VS 2015 的解决方案根目录中运行良好。就个人而言,我切换到在 git 模式下使用 TFS,所以我无法测试。此外,如果您确实有自定义提要,请确保您将自定义提要和 nuget.org 作为 Nuget.config 文件中的键,否则有时 TFS 会随机决定它无法恢复包。


我相信这至少需要 TFS 2012。 stackoverflow.com/questions/14365929/…
@zespri 什么文件正在等待删除? NuGet 包?那不应该等待删除......它应该被删除!完成我上面建议的操作后,转到 Team Explorer 并删除所有可能已经在源代码管理中的 Nuget 包。或者只是完全删除包文件夹。我已经使用这个设置好几个月了,从来没有遇到过这个错误。
仅供参考,在 VS2015 中,nuget.config 不必位于 /.nuget/ 中。它在解决方案根中工作得很好。
对于想知道如何创建以句点开头的文件夹和文件的任何人,请以另一个句点结束名称。所以那将是.tfignore。和.nuget。
@DerekZiemba 绝招!这些年来,我一直在通过命令行进行操作。我认为值得一提的是,当你这样做时,尾随的 '.'将被删除,我最初认为您的建议是只使用额外的“。”最后。
R
Ryan Gates

以下是上述问题的替代解决方案。

将包文件夹添加到 TFS(没有任何文件或子文件夹)

右键单击包文件夹

左键单击高级

点击披风

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

您可以在博客文章 Prevent TFS from adding installed NuGet packages to source control 中了解有关此方法的更多信息。


A
Adam Stewart

对于报告 .tfignore 选项无法与 nuget.config 设置一起使用的人,这可能会引起人们的兴趣 - 这些步骤最终对我有用:

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


在应用 Pharylon 的解决方案后,这对我有用,我在恢复包后这样做。
真的很有帮助,我们必须在初始时间(第一次将 .tfignore 文件提交到 TFS)执行此操作,但不是每个都执行此操作。如果我是对的。
我认为这种方法只适用于制作斗篷的机器。我说的对吗?所以这并不能解决所有团队成员的根本问题。
这对我有用 - 我确保包中的任何内容都没有提交,然后从磁盘中删除包目录。此时,它仍然在 VS 团队资源管理器中显示为待处理的更改,因此我选择撤消包目录中待处理的更改。这清理了它(我不需要关闭/重新打开),他们不会回来=)
T
Terje Sandstrøm

在解决方案的 .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 不会拾取它们。
D
Daniel Mann

您需要使用本地工作区才能使 .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 因为它是相对的。
R
Riegardt Steyn

您可以在 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 路径有硬引用)。
J
Just TFS

将您的解决方案设置为在构建时恢复,包文件夹和包文件将被签入,但包不会。


请解释“构建时恢复”。
自 NuGet 2.7 起,Visual Studio 右键单击“启用 NuGet 包还原”功能已被弃用——TFS 2013 本机支持在没有 NuGet.targets 文件和修改 proj 文件的情况下还原 NuGet 包。
M
MrHinsh - Martin Hinshelwood

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

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


我们使用 TFSVC,正如最初的帖子中已经提到的那样 - .tfignore 文件无法正常工作。
正如我所说,您需要使用正确的 .tfignore 格式。我相信你有错误的斜线
@MrHinsh 在与 Ed Thompson 交谈后,.tfignore 文件无法正常工作。 .gitignore 确实如此。
@Ed 需要解决这个问题;)
D
David Wilton

这在visual studio online和VS2013上对我来说不太适用。

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

https://i.stack.imgur.com/LKpuk.png

添加 .tfignore。我通常通过将文本文件添加到解决方案根目录,让它检测到,然后通过单击“检测到的添加”> 右键单击忽略来排除。

https://i.stack.imgur.com/kW00I.png

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

https://i.stack.imgur.com/ZaWd4.png

从其他评论看来,此时您的里程可能会有所不同。这就是我所做的:

检查所有东西,包括任何包裹。

删除解决方案中的所有包,然后签入此更改(这将从 TFS 中删除包)

打开解决方案并构建,这会将包添加到项目中,但 TFS 不会拾取它们。


首先,启用 Nuget 还原已被弃用,如果您稍后走这条路,则在 VS 2015 中不存在。第二:签入包和 dll 会将它们添加到源代码管理中,在解决方案中删除它们并签入不会将它们从 SC 中删除,只是从分支的尖端。 –
@TerjeSandstrøm 点,但问题是 2013 年特有的。是的,你是对的,你必须使用 tf destroy 将其从源代码控制中永久删除,但我发现没有其他方法可以让 TFS 遵守 .tfignore 文件
r
redcalx

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

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

我的 .tfignore 包含这一行:

\packages

[我正在使用 Visual Studio 2015 更新 2]

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

Make it easier to omit packages from TFVC #493


C
Community

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 时,它总是这样做。
c
coding4fun

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅