什么是强制文件路径强制.gitignore不要忽略包文件夹中的dll?

时间:2013-08-13 09:43:19

标签: git gitignore

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

我知道如果我添加!packages/*/lib/*.dll,它会抓住这样的东西,但我不想为每个略有不同的路径添加新的路径。

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

2 个答案:

答案 0 :(得分:1)

避免在Git

中对二进制文件进行版本控制

为什么不想忽略DLL,句点? Git不适合版本化二进制文件 ,因为它必须在每次更改时保留每个版本的完整副本,这会导致repos随着时间的推移变得更大,这使得它们更难克隆,并且可能也会减慢其他Git操作的速度。

此外,像GitHub这样的远程回购主机可能会限制您的回购协议的大小。 GitHub's current limit is 1 Gigabyte(强调我的):

  

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

尝试使用NuGet Package Restore

<强> Elmah is available via a NuGet package 即可。 正在使用NuGet package restore not an option for you如果启用它,您只需对xml配置文件进行版本控制即可指定要使用的Elmah版本,如果不这样做,您的项目将在构建期间下载已经拥有它。

另见Using github on my project that uses NuGet

关于.gitignore **

**语法只有made available after Git version 1.8.2,所以如果您使用的是早期版本的Git,那可能就是它无效的原因。您可以通过运行git --version来检查您的版本。

答案 1 :(得分:-1)

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

现在,我知道最重要的是你不应该在你的git存储库中包含DLL。 Cupcake制作的每一点都是有效的。但是,实际上,尺寸问题实际上仅适用于频繁更改的 DLL。由于整个解决方案中的objbin文件夹中的DLL几乎在每个构建版本上都会发生变化,因此对于git来说,这将是一个噩梦。但是,您的包存储库相对更改的频率很低。即使在高端情况下,它们也没有那么大的威胁:如果你有20个软件包,每个软件包有100KB的DLL,每个软件包运行10次更新,那么你将总共带来20MB的1GB限制--2% 。相反,如果您决定不包含DLL,正如Cupcake和许多其他人所说的那样,那么这意味着您必须处理以下两种后果之一:

  1. 您的存储库不会在结帐时构建
  2. 你必须使用nuget包恢复 - 听起来不错,但实质上意味着你要在每次结账时重新安装包。它可能是每一个构建,但很可能只在结帐后的第一个构建。
  3. 这些后果似乎都不可接受。此外,Nuget Package Restore不能立即配置,以便通过Visual Studio轻松更新包,即使VS的内置包管理器使这非常简单。让git找到不在binobj中的DLL并自然添加它们意味着你可以在Visual Studio中通过NuGet更新包,git将找到那些新包,删除旧包,并且你的解决方案建立在结帐。

    这样做的副作用非常重要:它意味着您必须确保您的存储库(以及克隆到您计算机上的每个存储库)必须在其存储库级binobj中包含.gitignore.gitignore {1}}。如果你不这样做,那些经常变化的DLL会进入你的仓库,他们很可能会占用大量的空间。另一方面,那些文件夹中有很多你应该忽略的东西 - 调试软件包等 - 你无论如何都希望这样做。事实上,您为.NET / Windows项目找到的许多预先配置的 <div class="worklongdiv" style="padding-top:111px";> <img src="images/Vividworklong.jpg"/> <div class="work-text-content-long"> <header>VIVID VAPOURS</header> <p style="font-size:17px; font-family:GothamRoundedBold;">Branding • Product Dev • Web Dev</p> </div> </div> <div class="worklongdiv" > <img src="images/Vividworklong.jpg"/> <div class="work-text-content-long"> <header>VIVID VAPOURS</header> <p style="font-size:17px; font-family:GothamRoundedBold;">Branding • Product Dev • Web Dev</p> </div> </div> 文件已经包含对这些文件夹的忽略。

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