Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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
Git 取消忽略特定的bin目录_Git_Visual Studio_Gitignore_Team Explorer - Fatal编程技术网

Git 取消忽略特定的bin目录

Git 取消忽略特定的bin目录,git,visual-studio,gitignore,team-explorer,Git,Visual Studio,Gitignore,Team Explorer,我有一个包含许多VS dll项目和几个web文件夹的大型存储库。我想忽略所有这些dll项目生成的所有bin和obj文件夹。但是,我不想忽略web文件夹中的bin文件夹。这是一个非常简化的secenario,文件夹列表可能如下所示: /DllProject1 /DllProject1/someInnerNamespace /DllProject1/properties /DllProject1/bin /DllProject1/bin/debug /DllProject1/obj/ /DllPro

我有一个包含许多VS dll项目和几个web文件夹的大型存储库。我想忽略所有这些dll项目生成的所有bin和obj文件夹。但是,我不想忽略web文件夹中的bin文件夹。这是一个非常简化的secenario,文件夹列表可能如下所示:

/DllProject1
/DllProject1/someInnerNamespace
/DllProject1/properties
/DllProject1/bin
/DllProject1/bin/debug
/DllProject1/obj/
/DllProject1/obj/debug

/DllProject2
/DllProject2/someInnerNamespace
/DllProject2/properties
/DllProject2/bin
/DllProject2/bin/debug
/DllProject2/obj/
/DllProject2/obj/debug

/Web
/Web/App_Code
/Web/assets
/Web/clientBin
/Web/bin
/Web/someModule
bin
obj
!/Web/bin
/web/*
!/web/bin/
请记住,在现实世界中,有许多dll项目可能会在不同级别的文件夹结构中找到。我想使用一个.gitignore,看起来像这样:

/DllProject1
/DllProject1/someInnerNamespace
/DllProject1/properties
/DllProject1/bin
/DllProject1/bin/debug
/DllProject1/obj/
/DllProject1/obj/debug

/DllProject2
/DllProject2/someInnerNamespace
/DllProject2/properties
/DllProject2/bin
/DllProject2/bin/debug
/DllProject2/obj/
/DllProject2/obj/debug

/Web
/Web/App_Code
/Web/assets
/Web/clientBin
/Web/bin
/Web/someModule
bin
obj
!/Web/bin
/web/*
!/web/bin/

此“应”忽略所有bin和obj文件夹,无论它们出现在rep中的哪个位置,但“应”明确取消忽略/Web/bin文件夹。但是,这似乎不起作用,Web/bin文件夹无论如何都会消失。

我不是编写
.gitignore
文件的专家,但我发现您当前的方法存在一些问题。首先,为什么您的对象和二进制文件首先在存储库中?它们不应该存在,您的任何构建工件也不应该存在。相反,构建到存储源代码的外部位置

对于
.gitignore
文件,正确的顺序是排除父文件夹,然后作为例外包括子文件夹。因此,如果您想排除
web
文件夹,但包括其
bin
子文件夹,您可以执行以下操作:

/DllProject1
/DllProject1/someInnerNamespace
/DllProject1/properties
/DllProject1/bin
/DllProject1/bin/debug
/DllProject1/obj/
/DllProject1/obj/debug

/DllProject2
/DllProject2/someInnerNamespace
/DllProject2/properties
/DllProject2/bin
/DllProject2/bin/debug
/DllProject2/obj/
/DllProject2/obj/debug

/Web
/Web/App_Code
/Web/assets
/Web/clientBin
/Web/bin
/Web/someModule
bin
obj
!/Web/bin
/web/*
!/web/bin/

我不确定在
bin
上使用覆盖式忽略是否会得到您想要的结果。但是正如我所说的,您可能应该将构建工件移到
.git
父文件夹之外。

您编写的
.gitignore
示例按照您的指定工作得非常好,我刚刚测试了它。但是,我会添加尾随斜杠,以仅匹配目录,而不是文件


您的问题是您在
/Web/bin
中没有文件,并且不知道Git不跟踪文件夹吗?Git会跟踪碰巧存储在文件中的内容,但不会跟踪文件或文件夹,因此您无法将空文件夹添加到Git存储库。

感谢您的回复。这里的目标是一个“ItJustWorks”环境,不需要开发人员记住一组规则来完成工作。默认情况下,VS dll项目会在项目目录下创建bin和obj文件夹,对我来说这很有意义。所以我不同意你关于临时“构建工件”应该在哪里的主张,而且你的建议会忽略web文件夹中的所有内容,除了bin文件夹,它显然是不可取的。我想我没有考虑太多细节。通常手动忽略构建工件不是一个通用用例,至少对于我接触过的语言/项目来说不是。也许你的情况不同。我只是想给你一些有用的信息,我将坚持我下面所说的,即构建工件不应该在源代码所在的地方。但也许像@VonC这样的大师可以给你你想要的答案。谢谢。bin文件夹肯定有内容。我想知道这是否是VS和团队资源管理器特有的。我不这么认为。试试普通Git命令行客户端的行为。如果它的行为不同,请为错误处理它的工具打开一个bug条目。