我试图让 TFS (2013) 忽略我的 packages
文件夹。我非常不想让它受源代码控制,因为我正在使用 NuGet,它很棒!
我尝试过隐藏(似乎不起作用),我尝试过添加 .tfignore
文件 - 没有任何内容被忽略。为什么 TFS 团队不像许多 Subversion 客户端那样添加一个永久忽略文件夹或文件的选项?!
交易是这样的:我们必须告诉 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(没有任何文件或子文件夹)
右键单击包文件夹
左键单击高级
点击披风
值得注意的是,需要针对每个 TFS 工作区应用此解决方案。它对我来说比使用 .tfignore
文件更可靠。
您可以在博客文章 Prevent TFS from adding installed NuGet packages to source control 中了解有关此方法的更多信息。
对于报告 .tfignore 选项无法与 nuget.config 设置一起使用的人,这可能会引起人们的兴趣 - 这些步骤最终对我有用:
删除我的包文件夹中的所有内容 确保 TFS 在该文件夹周围没有任何未决更改 关闭 VS 重新打开 VS,并重新加载解决方案 - 使用 Nuget 还原重新填充包 注意 TFS 源代码控制没有等待更改
在解决方案的 .nuget 文件夹中添加 nuget.config 文件。将以下内容添加到 nuget.config 文件中:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>
disableSourceControlIntegration 是 TFS 版本控制的诀窍。
您需要使用本地工作区才能使 .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
packages
而不是 \packages
因为它是相对的。
您可以在 AppData\Roaming
中为所有解决方案(旧的和新的)永久设置此一次性!
在您的 %AppData%\NuGet\NuGet.Config
文件中,在 </configuration>
XML 标记之前添加以下内容...
<config>
<add key="repositoryPath" value="C:\NuGetPackages" />
</config>
<solution>
<add key="disableSourceControlIntegration" value="true" />
</solution>
...你可以指定任何你想要的路径——重要的是把它放在你的 TFS 工作区之外!
现在你再也不用担心那些东西了。您的解决方案文件夹将不再包含任何包;所有解决方案都将默认使用您的自定义包位置。
注意 - 这适用于每个用户。
将您的解决方案设置为在构建时恢复,包文件夹和包文件将被签入,但包不会。
如果你使用带有 TFS 的 Git,你需要添加一个“.gitignore”文件。您可以在“团队项目|设置|'添加忽略文件'”中执行此操作。然后打开文件并取消注释 Nuget 包的内置忽略语句。
如果您使用的是 TFVC 并且配置了本地工作区,则可以使用“.tfignore”文件,该文件采用与 Git 文件相同的格式。我认为你需要“包/”。
这在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.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
Terje 的 answer 对我来说并不是一直有效,有时它会工作一段时间,但它会再次为我等待大量的“添加”。
我发现永久解决此问题的唯一方法是在我的工作区中隐藏包文件夹。
例如:
Type Server Local
============================================
Active $/Work/Main C:\Code\Main
Cloaked $/Work/Main/Packages
我遇到过同样的问题。 /packages
应该可以工作,但不适合我。 packages*.*
确实有效。