取消忽略特定的bin目录

3

我有一个包含许多VS dll项目和几个web文件夹的大型存储库。 我想要忽略所有这些dll项目生成的bin和obj文件夹。 但是,我不想忽略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

请注意,在现实世界中,可能会发现许多位于文件夹结构的各个层次上的dll项目。 我想使用类似于以下内容的.gitignore:

bin
obj
!/Web/bin

这应该会忽略存储库中出现的所有 bin 和 obj 文件夹,但应该明确取消忽略 /Web/bin 文件夹。然而,这似乎不起作用,Web/bin 文件夹仍会消失。

我会坚持我之前所说的,即构建产物不应该与源代码放在一起。但是像@VonC这样的大师或许能够给你想要的答案。 - Tim Biegeleisen
2个回答

1
你写的.gitignore示例按照你指定的方式完美地工作,我刚刚测试过了。不过,我会添加尾随斜杠以仅匹配目录而不是文件。
也许你的问题是在/Web/bin中没有文件,并且不知道Git不跟踪文件夹? Git跟踪存储在文件中的内容,但它不跟踪文件或文件夹,因此你无法将空文件夹添加到Git存储库中。

谢谢。bin文件夹肯定有内容。我想知道这是否特定于VS和Team Explorer。 - AnthonyWJones
我不会这么想。尝试使用普通的Git命令行客户端,如果它的行为不同,请为处理错误的工具打开一个错误条目。 - Vampire

0

我不是写 .gitignore 文件的专家,但我看到你目前的方法存在一些问题。首先,为什么你的对象和二进制文件在仓库中呢?它们不应该在那里,你的构建产物也不应该在那里。相反,应该构建到一个与存储源代码不同的位置

关于你的 .gitignore 文件,正确的顺序是排除父文件夹,然后将子文件夹包含作为一个例外。所以,如果你想排除 web 文件夹但又要包含它的 bin 子文件夹,你可以像这样做:

/web/*
!/web/bin/

我不确定在bin上使用通配符忽略是否会给您想要的结果。但是正如我所说,您应该将构建产物移动到.git父文件夹之外。


感谢您的回复。这里的目标是创建一个“只需运行”环境,不需要开发人员记住一组规则来完成工作。默认情况下,VS dll项目在项目目录下创建bin和obj文件夹,对我来说这种做法很合理。因此,我不同意您关于临时“构建工件”应该放置在哪里的说法。另外,您的建议将忽略web文件夹中除了bin文件夹以外的所有内容,这显然是不可取的。我认为我在问题中省略了太多细节。 - AnthonyWJones
通常手动忽略构建产物并不是一般的使用情况,至少对于我接触过的语言/项目来说不是。也许你的情况不同。我只是想给你提供有用的信息。 - Tim Biegeleisen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接