我有一个gitignore文件,使git忽略*.dll文件,这实际上是我想要的行为。然而,如果我想要一个异常(即能够提交foo.dll),我该如何实现这一点?
只需添加!在排除规则之前。
根据gitignore手册页:
模式有以下格式: ... 一个可选的前缀!这就否定了模式;任何被前一个模式排除的匹配文件将被重新包含。如果匹配一个否定的模式,这将覆盖低优先级的模式源。
Use:
*.dll #Exclude all dlls
!foo.dll #Except for foo.dll
从gitignore:
一个可选的前缀!这就否定了模式;任何被前一个模式排除的匹配文件将被重新包含。如果匹配一个否定的模式,这将覆盖低优先级的模式源。
要排除目录中的所有内容,只包括一些子目录,请执行以下操作:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
来源:https://gist.github.com/444295
如果你这样写,Git会忽略文件夹:
/js
但如果你这样做,它就不能添加异常: !/js/jquery或!/js/jquery或!/js/jquery/*
你必须写:
/js/*
只有这样你才能像这样去掉子文件夹
!/js/jquery
从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规则之间的关系:
文件/同一级别的文件:使用@Skilldrick解决方案。 文件夹/子文件夹:使用@Matiss Jurgelis解决方案。 不同级别的文件/文件或文件/子文件夹:您可以这样做: * .suo * .user * .userosscache * .sln.docstates #…… #整个子文件夹的异常 ! SetupFiles / elasticsearch-5.0.0 / * * / * ! SetupFiles / filebeat-5.0.0-windows-x86_64 / * * / * #不同级别文件的例外 ! SetupFiles / kibana-5.0.0-windows-x86 / * * / * .suo ! SetupFiles / logstash-5.0.0 / * * / * .suo
如果您正在使用Visual Studio,而您的.dll恰巧位于bin文件夹中,那么在为.dll文件添加异常之前,您需要为特定的bin文件夹本身添加一个异常。如。
!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]/模式。
这是我用README做的。Md文件在每个目录:
/data/*
!/data/README.md
!/data/input/
/data/input/*
!/data/input/README.md
!/data/output/
/data/output/*
!/data/output/README.md
对于嵌套文件夹,我根据Matiss的回答提出了一个解决方案。
假设我想忽略build/ directory(在/app中)中的所有内容。所以我这样做:
build/*
然而,如果我想排除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
重要提示:
所有路径都应该以/开头,并相对于.gitignore 你必须一次处理一个子文件夹。你可以在VS Code中看到(例如)它在每一步都包含什么和不包含什么。
推荐文章
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别
- GitHub -致命:无法读取用户名https://github.com':没有这样的文件或目录
- 撤消git平分错误
- 使用.gitconfig配置diff工具
- 如何配置Mac OS X术语,使git有颜色?
- Visual Studio Code: .git文件夹/文件隐藏