【问题标题】:How to include NuGet packages "build" folder when using git with TFS将 git 与 TFS 一起使用时如何包含 NuGet 包“构建”文件夹
【发布时间】:2016-06-25 12:56:57
【问题描述】:

我是 git 新手,正在将它与 TFS 和 Visual Studio 2013 一起使用。

我希望下载的 NuGet 包包含在 Git 源代码管理中。

例如,我添加了一个包 System.Data.SQLite.Core.1.0.99.0,其中包含以下文件:

lib\net20\System.Data.SQLite.dll
lib\net35\System.Data.SQLite.dll
...
build\net20\x64\SQLite.Interop.dll
build\net20\x86\SQLite.Interop.dll

packages\...\lib 下的文件包含在源代码管理中,这是我想要的。

packages\...\build 下的文件包括在内。

我怎样才能做到这一点? Visual Studio 2013 提供的 .gitignore 文件包括以下几行:

# Build results

...
[Rr]elease/
x64/
build/
...

# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets
!packages/*/build/

如果我没看错的话是

  • 不包括一些输出文件夹,包括“build”和“x64”,
  • 然后当 build 文件夹位于“packages”(NuGet 包文件夹)下时,再次显式启用它。

我尝试过多种方式编辑 .gitignore,包括添加:

!**/packages/*/build/
!**/packages/*/build/*/x64

但我没有尝试过。任何提示表示赞赏。

更新

我发现了一些有用的东西。

事实上,我的 git 存储库在子文件夹中包含多个 VS 解决方案。所以实际上我的包文件夹的路径是:

root/folder1/folder2/packages

其中“root”是我的 GIT 存储库的根目录,即包含 .gitignore 的目录。

我可以通过添加以下行来让它工作:

!*/*/packages/*/build/
!*/*/packages/*/build/*/x64

这是一种解决方法,但我真正想要的是能够启用 packages/*/buildpackages/*/build/*/x64 出现在文件夹层次结构中的任何位置。前缀“**”不起作用。

重现这个:

  • 在 git 存储库中创建子文件夹
  • 在此子文件夹中创建 Visual Studio 2013 解决方案
  • 使用 NuGet 将包“System.Data.SQLite Core (x86/x64)”添加到解决方案中。

【问题讨论】:

  • 您不应该将二进制文件放入 Git 存储库——Git 不能有效地对二进制文件进行版本控制,它会导致严重的膨胀,并且随着时间的推移在克隆和签出分支时会导致严重的存储库性能问题。如果出于某种原因必须将二进制文件放入 Git,请使用 Git LFS。
  • @DanielMann 感谢您的建议,但我已经考虑了权衡,仍然想存储二进制文件(少数二进制文件是 NuGet 包的一部分,永远不会改变)。我不相信我们内部的 TFS Git 服务器支持 LFS。
  • 如果反对者能解释我可以做些什么来改善这个问题,那就太好了

标签: git visual-studio-2013 tfs gitignore


【解决方案1】:

要包含包文件夹中的所有文件,请添加以下内容:

!packages/*

【讨论】:

  • 我试过了,但它不起作用。起作用的是暂时注释掉“x64/”和“build/”这两行。然后这些文件作为未跟踪文件出现在 VS2013 中,我可以将它们签入并将它们推送到服务器。随后,我撤消了对 .gitignore 的更改。这显然不是一个令人满意的解决方法。
  • 我在本地机器上运行了这个场景,发现我需要为 git 添加 "!packages/*" 以包含包下的所有文件,包括 "packages/build" 文件夹。
  • 也许 VS 正在缓存 gitignore 文件。更改后是否重新启动?
  • 我不认为它可以缓存 .gitignore 文件,因为如果我注释掉“x64/”和“build/”这两行,那么这些文件在 VS2013 中显示为未跟踪的文件。我在进行更改后尝试重新启动,但没有任何区别。
  • 查看问题更新以获取更多信息,包括解决方法
【解决方案2】:

删除项目“.git”文件夹中的“ms-persist.xml”文件,然后重试。

【讨论】:

  • @Joe 你可以运行“git config --list --global”命令来检查你是否有全局 gitignore 文件吗?
  • 命令的输出是 user.name 和 user.email 的值 - 与全局 gitignore 文件无关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多