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

Mat*_*att 327 tfs nuget

我想让TFS(2013)忽略我的packages文件夹.我热情地不希望它被源控制,因为我正在使用NuGet,这太棒了!

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

Pha*_*lon 491

这是交易:我们必须告诉NuGet TFS忽略这些包,因为NuGet正在尝试做与源控制相关的东西,它绝对不应该这样做(糟糕的形式,微软!).所以你必须做两件事.

首先,添加一个名为.tfignore解决方案文件夹的文件(注意s后面没有tf).其内容应如下:

\packages
Run Code Online (Sandbox Code Playgroud)

这告诉TFS忽略你的包文件夹.现在,您会认为这也会忽略该repositories.config文件.但事实并非如此.为什么?谁知道,微软的方式是奇怪而神秘的.实际上,我认为它是我在下面概述的NuGet内容的一部分,但是如果将来修复并且你想保留repositories.config文件而不是让VS重新生成它,你应该能够使用它:

\packages
!\packages\repositories.config
Run Code Online (Sandbox Code Playgroud)

好的,现在感谢我们的.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>
Run Code Online (Sandbox Code Playgroud)

现在你的软件包应该留出源代码控制的.只需记住将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将随机决定它无法还原包.

  • 对于想知道如何创建以句点开头的文件夹和文件的人,请使用其他句点结束名称.那就是.tfignore.和.nuget. (141认同)
  • @DerekZiemba整洁的把戏!这些年来我一直在通过命令行完成它.我认为值得一提的是,当你这样做时,尾随'.' 将被删除,我最初认为你的建议只是生活在一个额外的'.' 最后. (16认同)
  • 啊.还有一步:http://stackoverflow.com/a/25423358/2496266 (6认同)
  • 在VS2015的Fyi中,nuget.config不会**必须在/.nuget/里面.它在解决方案根目录中运行良好. (5认同)
  • @zespri什么文件正在等待删除?NuGet包?这不应该等待删除...它应该被删除!执行上面建议的操作后,转到团队资源管理器并删除可能已在源代码管理中的所有Nuget包.或者只是删除packages文件夹.几个月来我一直在使用这个设置,从未经历过这个错误. (2认同)

Rya*_*tes 52

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

  • 将packages文件夹添加到TFS(没有任何文件或子文件夹)
  • 右键单击Packages文件夹
  • 左键单击高级
  • 单击披风

值得注意的是,需要根据TFS工作空间应用此解决方案.它对我来说更加可靠,而不是使用该.tfignore文件.

您可以在博客文章Prevent TFS中添加有关此方法的更多信息,以便将已安装的NuGet包添加到源代码管理中.


Ada*_*art 22

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

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

  • 在应用Pharylon的解决方案后,这对我有用,我在恢复包装后做了这个. (3认同)

Ter*_*røm 8

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

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>
Run Code Online (Sandbox Code Playgroud)

disableSourceControlIntegration是TFS版本控制的技巧.

  • 好的,这实际上是"启用NuGet包恢复"的功能.请务必关闭并重新打开您的解决方案!只有在打开解决方案时才会读取NuGet.config文件. (2认同)

Dan*_*ann 7

您需要使用本地工作区.tfignore才能工作.该.tfignore文件必须位于包含要忽略的文件或文件夹的文件夹中.

因此,如果您的解决方案结构如下所示:

\Project
   \Packages
   \OtherStuff
   foo.cs
Run Code Online (Sandbox Code Playgroud)

你将.tfignore文件放在\ Project中:

\Project
   \Packages
   \OtherStuff
   foo.cs
   .tfignore
Run Code Online (Sandbox Code Playgroud)

您案例中.tfignore的内容将是:

\packages

这里有一些文档给你:http://msdn.microsoft.com/library/vstudio/ms245454(v = vs.110).aspx #tfignore

  • 我添加了.tfignore文件,当我构建项目时,它仍在尝试将包添加到tfs.似乎我无法阻止它. (2认同)
  • 请参阅http://docs.nuget.org/docs/reference/package-restore-with-team-build - 它是.tfignore的NuGet错误,但可以通过告诉NuGet为SCM集成推动自己来纠正. (2认同)

Hel*_*iac 6

您可以在AppData\Roaming所有解决方案(旧版和新版)中永久性地设置此项!

在您的%AppData%\NuGet\NuGet.Config文件中,在</configuration>XML标记之前添加以下内容...

<config>
  <add key="repositoryPath" value="C:\NuGetPackages" />
</config>
<solution>
  <add key="disableSourceControlIntegration" value="true" />
</solution>
Run Code Online (Sandbox Code Playgroud)

...你可以指定你想要的任何路径 - 重要的是将它放在你的TFS工作区外面!

现在你再也不用担心那些东西了.您的解决方案文件夹将不再包含任何包; 所有解决方案都将默认使用您的自定义包位置.

注意 - 此工作基于每个用户.