【问题标题】:Un-ignore a specific bin directory取消忽略特定的 bin 目录
【发布时间】:2016-12-22 09:32:45
【问题描述】:

我有一个包含许多 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 这样的大师可以给你你正在寻找的答案。

标签: git visual-studio gitignore team-explorer


【解决方案1】:

您编写的.gitignore 示例在您指定时工作得非常好,我刚刚对其进行了测试。但是,我会添加尾部斜杠以仅匹配目录,而不是文件。

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

【讨论】:

  • 谢谢。 bin 文件夹肯定有内容。我想知道这是否特定于 VS 和 Team Explorer。
  • 我没想到会这样。试试普通的 Git 命令行客户端的行为方式。如果它的行为不同,请为错误处理它的工具打开一个错误条目。
【解决方案2】:

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

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

/web/*
!/web/bin/

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

【讨论】:

  • 感谢您的回复。这里的目标是一个“它只是工作”的环境,不需要开发人员记住一组规则来完成工作。默认情况下,VS dll 项目会在项目目录下创建 bin 和 obj 文件夹,对我来说这很有意义。所以我不同意你关于临时“构建工件”应该在哪里的断言,而且你的建议将忽略 web 文件夹中的所有内容,除了 bin 文件夹,这显然是不可取的。我想我的问题太详细了。
  • 通常手动忽略构建工件不是一般用例,至少对于我接触过的语言/项目来说不是。也许你的情况不同。我只是想为您提供有用的信息。
猜你喜欢
  • 2021-07-27
  • 2017-05-10
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多