我正在尝试忽略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文件。
答案 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文件。