GitIgnore - 忽略bin /但包括bin / * .recresh

时间:2011-11-17 23:57:29

标签: git gitignore

我正在尝试忽略Web项目的bin文件夹,但包含该bin文件夹中的.refresh文件。

这是我在.gitignore中的内容:

[Bb]in/
#Allow .refresh files for web sites
![Bb]in/*.refresh

但这不起作用。我究竟做错了什么?我也试过了:

!*.refresh

结果相同。

更新

这是文件结构,如果这有助于诊断:

\rootfolder
    .gitignore
    \project1
         \bin
              file1.dll
              file1.dll.refresh

您可以看到我们的gitignore文件所在的位置。我们不想要.dll但我们确实需要.refresh文件。

6 个答案:

答案 0 :(得分:9)

这种方式对我不起作用:

[Bb]in/*
![Bb]in/*.refresh

我在.gitignore文件上使用了语法,并且工作正常。

试一试:

**/[Bb]in/*
!**/[Bb]in/*.refresh

答案 1 :(得分:7)

尝试以下操作:

[Bb]in/*
![Bb]in/*.refresh

这是因为当你只是做bin或bin时它根本不会进入文件夹来寻找文件。你必须明确地说,去文件夹,但忽略一切,然后说不要忽略* .refresh。

编辑OP的结构:

然后你必须

1)在.gitignore 的路径中包含project1:

project1/bin/*
project1/bin/*.refresh

2)在project1中添加.gitignore (我推荐这个)与之前的内容。

答案 2 :(得分:4)

我知道这是一个老帖子,但我仍然遇到这个问题,并且使用MsysGit 1.8.0,我无法使用@manojlds接受的答案。

似乎排除任何深度的所有bin文件夹的唯一模式是[Bb]in[Bb]in/。根据{{​​3}},具有尾部斜杠的那个是最正确的,因为它只匹配目录,而不是名为“bin”的文件。一旦我尝试向模式添加其他级别(例如[Bb]in/*),就会根据手册页在任何深度停止匹配并相对于.gitignore文件的位置。

现在,假设我的全局.gitignore文件中有一个[Bb]in/条目,我发现在特定bin文件夹中取消特定模式文件(如.refresh文件)的最佳方法是创建另一个.gitignore文件bin文件夹上方的一个目录(即项目目录),并在其中放置以下条目:

![Bb]in/
[Bb]in/*
![Bb]in/*.refresh

我们的网站项目bin文件夹从不包含像Debug或Release这样的子文件夹,但我测试过,但仍然会根据需要忽略bin文件夹中的子文件夹。

如果我只使用第二个和第三个条目,如接受的答案所示,它不起作用。一个直观的解释是第一个条目从全局glob中删除了这个特定的bin文件夹,所以它的内容将被包含,然后第二个条目按照需要工作,因为在这种情况下它相对于.gitignore文件,第三个条目删除第二个条目创建的glob中所需的模式。

答案 3 :(得分:3)

以下适用于我:

[Bb]in/*
![Bb]in/*.refresh

请注意,第一行获得了一个尾随星号,以匹配bin目录的所有内容,而不是目录本身。这样你就可以从glob。* .refresh。

中添加一个例外

答案 4 :(得分:2)

使用Roslyn(“为网站项目启用最新的C#和VB功能”),现在“bin”中将有一个子目录,它将包含您需要的.refresh文件。这是一个令人头疼的问题,因为git的默认行为一旦排除文件夹,其中的任何异常都将永远不会被找到(/ directory / * vs /directory/**/.)

所以我们需要bin如下:

**/[Bb]in/**/*.*

否则整个roslyn目录将被忽略,然后

!**/*.refresh

答案 5 :(得分:1)

另一种解决方案可能是从命令行强制包含.refresh文件。

git add *.dll.refresh --force

  

- 力
  允许添加否则忽略的文件。

您可以只排除.gitignore文件中bin文件夹中的所有内容。 如果添加新包,则必须再次强制包含新的.refresh文件。