git忽略exception

我有一个gitignore文件,使git忽略*.dll文件,这实际上是我想要的行为。 但是,如果我想要一个exception(即能够提交foo.dll ),我该如何实现呢?

使用:

 *.dll #Exclude all dlls !foo.dll #Except for foo.dll 

来自gitignore :

一个可选的前缀! 否定了这种模式; 任何先前模式排除的匹配文件将再次包含在内。 如果否定模式匹配,则将覆盖较低的优先模式源。

如果你写了Git,忽略文件夹:

 /js 

但它不能添加exception,如果你这样做: !/js/jquery!/js/jquery/!/js/jquery/*

你必须写:

 /js/* 

只有这样你才能像这样的子文件夹

 !/js/jquery 

你可以简单地git add -f path/to/foo.dll

.gitignore忽略只有通常跟踪的文件和像git add .这样的东西git add .

只需添加! 排除规则之前。

根据gitignore手册页 :

模式有以下格式:

  • 一个可选的前缀! 否定了这种模式; 任何先前模式排除的匹配文件将再次包含在内。 如果否定模式匹配,则将覆盖较低的优先模式源。

要排除目录中的所有内容,但要排除一些子目录,请执行以下操作:

 wp-content/* !wp-content/plugins/ !wp-content/themes/ 

来源: https : //gist.github.com/444295

!foo.dll中的!foo.dll ,或者(每次!) git add -f foo.dll

由于Git 2.7.0 Git将考虑到例外。 从官方发布说明:

  • 允许稍后的“!/ abc / def”覆盖出现在同一.gitignore文件中的较早的“/ abc”,以便更容易地expression“/ abc目录中的所有内容都被忽略,除了…”。

https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt

如果您使用的是Visual Studio,而您的.dll碰巧位于bin文件夹中,那么您需要为特定的bin文件夹本身添加一个exception,然后才能为.dll文件添加exception。 例如

 !SourceCode/Solution/Project/bin !SourceCode/Solution/Project/bin/My.dll 

这是因为默认的Visual Studio .gitignore文件包含一个忽略模式[Bbin]/

这种模式是切换所有bin文件夹(因此它们的内容),这使任何尝试包括内容冗余(因为文件夹本身已被忽略)。

我能够find为什么我的文件不被排除运行

 git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll 

从Git Bash窗口。 这返回了[Bbin]/模式。

解决scheme取决于git忽略规则和exception规则之间的关系:

  1. 相同级别的文件/文件:使用@Skilldrick解决scheme 。
  2. 文件夹/子文件夹:使用@Matiss Jurgelis解决scheme 。
  3. 不同级别的文件/文件或文件/子文件夹:你可以这样做:

     *.suo *.user *.userosscache *.sln.docstates # ... # Exceptions for entire subfolders !SetupFiles/elasticsearch-5.0.0/**/* !SetupFiles/filebeat-5.0.0-windows-x86_64/**/* # Exceptions for files in different levels !SetupFiles/kibana-5.0.0-windows-x86/**/*.suo !SetupFiles/logstash-5.0.0/**/*.suo