我有一个gitignore文件,使git忽略*.dll文件,这实际上是我想要的行为。然而,如果我想要一个异常(即能够提交foo.dll),我该如何实现呢?
*.dll
foo.dll
只需要在排除规则之前添加!。
!
根据Gitignore手册页:
模式有以下格式: ... 一个可选的前缀!这就否定了模式;任何被前一个模式排除的匹配文件将被重新包含。如果匹配一个否定的模式,这将覆盖低优先级的模式源。
模式有以下格式:
...
使用:
*.dll #Exclude all dlls !foo.dll #Except for foo.dll
从gitignore:
一个可选的前缀!这就否定了模式;任何被前一个模式排除的匹配文件将被重新包含。如果匹配一个否定的模式,这将覆盖低优先级的模式源。
你可以简单地git add -f path/to/foo.dll。
git add -f path/to/foo.dll
.gitignore只忽略通常跟踪的文件和类似git add .的东西
.gitignore
git add .
在.gitignore中!foo.dll,或者(每次!)git add -f foo.dll
!foo.dll
git add -f foo.dll
要排除目录中的所有内容,只包括一些子目录,请执行以下操作:
wp-content/* !wp-content/plugins/ !wp-content/themes/
来源:https://gist.github.com/444295
如果你这样写,Git会忽略文件夹:
/js
但它不能添加异常,如果你这样做: !/js/jquery or !/js/jquery/ or !/js/jquery/*
!/js/jquery
!/js/jquery/
!/js/jquery/*
你必须写:
/js/*
只有这样你才能像这样去掉子文件夹
从Git 2.7.0开始,Git会考虑异常情况。官方发布说明如下:
允许后面的"!/abc/def"要覆盖先前的“;/abc"那 出现在同一个.gitignore文件中,使其更容易表达 . /abc目录下的所有内容都将被忽略,除了
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt
edit:显然,自从Git 2.8.0以来,这个功能就不能再工作了
解决方案取决于git的ignore规则和exception规则之间的关系:
文件/不同级别的文件或文件/子文件夹:你可以这样做:
*.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
如果你正在使用Visual Studio,而你的.dll恰好在bin文件夹中,那么在为.dll文件添加异常之前,你需要为特定的bin文件夹本身添加一个异常。如。
bin
!SourceCode/Solution/Project/bin !SourceCode/Solution/Project/bin/My.dll
这是因为默认的Visual Studio .gitignore文件包含了[Bbin]/的忽略模式
[Bbin]/
此模式删除所有bin文件夹(以及它们的内容),这使得任何包含内容的尝试都是多余的(因为文件夹本身已经被忽略)。
我能够找到为什么我的文件没有被例外运行
git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll
从Git Bash窗口。返回[Bbin]/模式。
这是我用README做的。Md文件在每个目录:
/data/* !/data/README.md !/data/input/ /data/input/* !/data/input/README.md !/data/output/ /data/output/* !/data/output/README.md
如果你有一个目录,并且想要忽略除某些文件(例如*.py文件)之外的所有内容,你可以这样做:
*.py
sub-dir/**/*.* !sub-dir/**/*.py
对于嵌套文件夹,我提出了一个基于魅力匙的回答的解决方案。
假设我想忽略build/目录(在/app中)中的所有内容。所以我这样做:
build/
/app
build/*
然而,如果我想排除build/outputs/bundle/release子文件夹,我需要玩一些捉迷藏!
build/outputs/bundle/release
/app/build/* !/app/build/outputs /app/build/outputs/* !/app/build/outputs/bundle /app/build/outputs/bundle/* !/app/build/outputs/bundle/release
/