我有一个gitignore文件,使git忽略*.dll
文件,这实际上是我想要的行为。但是,如果我想要一个异常(即能够提交foo.dll
),如何实现呢?
我有一个gitignore文件,使git忽略*.dll
文件,这实际上是我想要的行为。但是,如果我想要一个异常(即能够提交foo.dll
),如何实现呢?
Answers:
采用:
*.dll #Exclude all dlls
!foo.dll #Except for foo.dll
可选的前缀!否定了模式;先前模式排除的所有匹配文件将再次包含在内。如果否定的模式匹配,它将覆盖优先级较低的模式源。
*.dll
在其中,而我项目的gitignore已包含!Libs/*.dll
但似乎没有用。
!Libs/**/*.dll
。
!**/Libs/*.dll
,具体取决于文件夹结构。
!foo.dll
会使命令无效。如果我在单独的行上添加评论,它将起作用。
如果您输入以下内容,Git会忽略文件夹:
/js
但如果你不能添加例外:
!/js/jquery
或!/js/jquery/
或!/js/jquery/*
您必须写:
/js/*
只有这样,您才能删除像这样的子文件夹
!/js/jquery
!/js/jquery/xyzlib
将不会被忽略...
/js/*
,!/js/jquery
,/js/jquery/*
,!/js/jquery/xyzlib
?感觉像是一种相当有趣的方式...
要排除目录中的所有内容,但要排除某些子目录,请执行以下操作:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
资料来源:https : //gist.github.com/444295
只需!
在排除规则之前添加即可。
根据gitignore手册页:
模式具有以下格式:
...
- 可选的前缀!否定了模式;先前模式排除的所有匹配文件将再次包含在内。如果否定的模式匹配,它将覆盖优先级较低的模式源。
!foo.dll
在.gitignore中,或者(每次!) git add -f foo.dll
如果您使用的是Visual Studio,而您的.dll恰好位于bin
文件夹中,则需要为特定bin文件夹本身添加一个例外,然后才能为.dll文件添加例外。例如
!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll
这是因为默认的Visual Studio .gitignore
文件包含用于的忽略模式[Bbin]/
此模式将切换所有bin文件夹(以及因此内容),这会使包含内容的任何尝试成为多余(因为文件夹本身已被忽略)。
我能够找到为什么不通过运行来排除我的文件的原因
git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll
从Git Bash窗口中。这返回了[Bbin]/
模式。
解决方案取决于gitignore规则和异常规则之间的关系:
文件/不同级别的文件或文件/子文件夹:您可以执行以下操作:
*.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
从Git 2.7.0开始,Git将考虑例外情况。从官方发行说明:
- 允许更高版本的“!/ abc / def”覆盖出现在同一.gitignore文件中的更高版本的“ / abc”,以使其更易于表达“ / abc目录中的所有内容都被忽略,除了...”。
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt