【发布时间】: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/*/build 和 packages/*/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