Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';这是一个很好的文件路径,可以强制。gitignore不可以忽略包文件夹中的DLL吗?_Git_Gitignore - Fatal编程技术网

什么';这是一个很好的文件路径,可以强制。gitignore不可以忽略包文件夹中的DLL吗?

什么';这是一个很好的文件路径,可以强制。gitignore不可以忽略包文件夹中的DLL吗?,git,gitignore,Git,Gitignore,所以我在.gitignore文件中得到了这个路径:!packages/*/lib/*/*.dll,这将阻止git忽略具有特定.NET版本的特定dll版本的任何内容。但是,像Elmah这样的东西没有不同的版本(Elmah当前版本的路径类似于packages\Elmah.corebrary.1.2.2\lib\Elmah.dll) 我知道如果我添加!packages/*/lib/*.dll它将捕获类似的内容,但我不希望为每个稍有不同的路径添加新路径 我已尝试添加!包/*/lib/***.dll,但这

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

我知道如果我添加
!packages/*/lib/*.dll
它将捕获类似的内容,但我不希望为每个稍有不同的路径添加新路径

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

避免在Git中对二进制文件进行版本控制 为什么不忽略DLL,句号?Git不太适合对二进制文件进行版本控制,因为每次更改版本时,它都必须保留每个版本的完整副本,这会导致repo随着时间的推移变得更大,从而使它们更难克隆,而且可能也会减慢其他Git操作的速度

此外,像GitHub这样的远程回购主机可能会限制回购的规模。(我的重点):

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

尝试改用NuGet包还原 正在使用?如果启用它,您只需对指定要使用哪个版本的Elmah的xml配置文件进行版本设置,如果您还没有,您的项目将在构建过程中下载它

另见

关于gitignore**
**
语法是唯一的,因此如果您使用的是早期版本的Git,这可能就是它不起作用的原因。您可以通过运行
git--version
来检查您的版本。一个好的答案是查看您的全局gitignore文件(
gitignore\u global.txt
)。如果您在Windows计算机上工作(我假设您是),您可能希望签入我的文档。如果已安装SourceTree,请同时签入Atlassian的程序文件。您很可能会看到
*.dll
在这些文件中。去掉这个,你应该是个好人

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

  • 您的存储库不会基于签出构建
  • 您必须使用nuget软件包还原—这听起来不错,但实际上意味着您在每次签出时都要重新安装软件包。它可能是每个单独的构建,但更可能是在签出后的第一个构建上
  • 这两种后果似乎都不可接受。此外,Nuget Package Restore无法立即配置,以便通过Visual Studio轻松更新包,尽管内置的VS包管理器使这一过程非常简单。让git查找不在
    bin
    obj
    中的DLL,并自然添加它们意味着您可以通过Visual Studio中的NuGet更新包,git将查找这些新包,删除旧包,您的解决方案建立在签出的基础上

    这样做的副作用非常重要:这意味着您必须确保您的存储库(以及克隆到您机器上的每个存储库)必须在其存储库级别
    中包含
    bin
    obj
    。如果您不这样做,那么那些频繁更改的DLL将进入您的回购协议,它们很可能会占用大量空间。另一方面,这些文件夹中的内容太多了,您应该已经忽略了——调试包等等——希望您已经做到了。事实上,您为.NET/Windows项目找到的许多预先配置的
    .gitignore
    文件已经包含这些文件夹的忽略


    最后,虽然在git存储库中不包含DLL的原则是好的,但您不能忘记,对于频繁更改的
    DLL来说,这是最重要的,而且为了一致性、易构建性和效率,您的依赖项肯定应该包含在项目中。

    您使用的是哪个版本的git<代码>**
    是。有几件事:1。我们使用的不是Github,而是Stash(Atlassian版本的Github Enterprise)。2.我过去在nuget软件包还原方面有过不好的经历。3.我们使用了相当多的第三方DLL,这些DLL无法通过nuget获得。诚然,这些将不在packages文件夹中,但总体上“不要将DLL放在git中”不会有多大帮助。@PiersKarsenbarg如果您经常升级DLL库,尽可能避免在git中对它们进行版本控制是您的最大利益。如果这是您关心的问题,那么如果您能描述一下我们过去在NuGet package restore方面遇到的问题,将会有所帮助。好的,等等,事实上,还有另一个解决方案,你可以继续并对它们进行版本化,但最终你可能需要修改