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规则之间的关系:
- 相同级别的文件/文件:使用@Skilldrick解决scheme 。
- 文件夹/子文件夹:使用@Matiss Jurgelis解决scheme 。
-
不同级别的文件/文件或文件/子文件夹:你可以这样做:
*.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