0

所以我在我的 .gitignore 文件中有这个路径:!packages/*/lib/*/*.dll这将停止 git 忽略任何具有特定版本的 .NET 的 dll 的内容。但是,像 Elmah 这样的东西没有不同的版本(当前版本的 Elmah 的路径类似于packages\elmah.corelibrary.1.2.2\lib\Elmah.dll)。

我知道如果我添加!packages/*/lib/*.dll它会捕获这样的事情,但我宁愿不为每个略有不同的路径添加新路径。

我试过添加!packages/*/lib/**/*.dll,但这似乎不起作用。有任何想法吗?

4

2 回答 2

1

避免在 Git 中对二进制文件进行版本控制

你为什么不想忽略 DLL,期间? Git 不适合对二进制文件进行版本控制,因为每次更改时它都必须保留每个版本的完整副本,这会导致存储库随着时间的推移变得更大,这使得它们更难克隆,并且可能会减慢速度其他 Git 操作也是如此。

此外,像 GitHub 这样的远程 repo 主机可能会限制你的 repo 的大小。GitHub 的当前限制是 1 GB(强调我的):

为了获得最佳性能,我们建议每个存储库保持在 1GB 以下。如果将大文件(通常是二进制文件)保留在存储库之外,则很容易保持此限制。如果您的存储库超过 1GB,您可能会收到一封来自支持人员的礼貌电子邮件,要求您减小存储库的大小以将其恢复到 1GB 以下。

尝试改用 NuGet 包还原

Elmah 可通过 NuGet 包获得使用NuGet 包还原不是您的选择吗?如果启用它,您只需对指定使用哪个版本的 Elmah 的 xml 配置文件进行版本控制,如果您还没有它,您的项目将在构建期间下载它。

另请参阅在我使用 NuGet 的项目上使用 github

关于 .gitignore **

**语法仅在 Git 版本 1.8.2 之后可用,因此如果您使用的是早期版本的 Git,这可能就是它不起作用的原因。您可以通过运行来检查您的版本git --version

于 2013-08-14T04:51:57.220 回答
-1

一个好的答案是查看您的全局 gitignore 文件 ( gitignore_global.txt)。如果您正在使用 Windows 机器(我假设您是),您可能需要签入我的文档。如果您安装了 SourceTree,请同时检查 Atlassian 的程序文件。*.dll您很可能会在这些文件中看到它。删除它,你应该很好。

现在,我知道重要的是您不应该在您的 git 存储库中包含 DLL。Cupcake 提出的每一点都是有效的。然而,实际上,大小问题实际上只适用于频繁更改的DLL。由于整个解决方案中的 DLLobjbin文件夹几乎在每次构建时都会发生变化,因此对于 git 来说,这将是一场噩梦。但是,您的软件包存储库更改相对较少。即使在极端情况下,它们也不会构成太大的威胁:如果您有 20 个包,每个包都有一个 100KB 的 DLL,并且每个包都运行了 10 次更新,那么您的 1GB 限制总共会达到 20MB - 2% . 相反,如果您决定不包含 DLL,就像 Cupcake 和许多其他人所说的那样,那么这意味着您必须处理以下两种后果之一:

  1. 您的存储库不会在结帐时构建
  2. 您必须使用 nuget 包还原 - 这听起来很棒,但本质上意味着您在每次结帐时都重新安装包。它可能是每一个构建,但很可能只在结帐后的第一个构建中。

这些后果似乎都不可接受。此外,Nuget 包还原不能立即配置为通过 Visual Studio 轻松更新包,即使 VS 的内置包管理器使这非常简单。让 git 找到不在其中的 DLLbinobj自然地添加它们意味着您可以通过 Visual Studio 中的 NuGet 更新包,git 将找到这些新包,删除旧包,并且您的解决方案在结帐时构建。

这样做的副作用非常重要:这意味着您必须确保您的存储库(以及克隆到您机器上的每个存储库)必须包含binobj在它们的存储库级别.gitignore中。如果您不这样做,那么那些频繁更改的 DLL 将进入您的存储库,它们很可能会占用大量空间。不利的一面是,那些文件夹中有很多东西你应该已经忽略了 - 调试包等 - 无论如何你希望已经这样做了。事实上,.gitignore您为 .NET/Windows 项目找到的许多预配置文件已经包含对这些文件夹的忽略。

最后,虽然在您的 git 存储库中不包含 DLL 的原则是好的,但您不能忘记它对于频繁更改的DLL 是最重要的,并且您的依赖项肯定应该包含在您的项目中以保持一致性和易用性-构建和效率。

于 2015-06-08T20:04:16.037 回答