git忽略异常
Posted
技术标签:
【中文标题】git忽略异常【英文标题】:git ignore exception 【发布时间】:2011-03-13 07:21:11 【问题描述】:我有一个 gitignore 文件,它使 git 忽略 *.dll
文件,这实际上是我想要的行为。但是,如果我想要一个例外(即能够提交foo.dll
),我该如何实现呢?
【问题讨论】:
Exceptions in .gitignore 的可能重复项 fwiw,关于这个主题的重复答案的祖父 - 你应该仔细查看 - 可能是Make .gitignore ignore everything except a few files - 非常有规律的活动和几个很好的答案。我是this answer 的特别粉丝,它看起来清晰透彻。 Make .gitignore ignore everything except a few files的可能重复 【参考方案1】:用途:
*.dll #Exclude all dlls
!foo.dll #Except for foo.dll
来自gitignore:
可选前缀!这否定了模式;任何被先前模式排除的匹配文件都将再次包含在内。如果否定模式匹配,这将覆盖较低优先级的模式源。
【讨论】:
另见答案表格@Matiss Jurgelis - 这是重要的补充 我可以将异常添加到我的项目的 gitignore 而不是我的全局 gitignore 吗?例如,如果我想在一个目录中包含所有 DLL?我的 gitignore_global 里面有*.dll
,我项目的 gitignore 里面有 !Libs/*.dll
但这似乎不起作用。
@jkinz,你应该试试!Libs/**/*.dll
。
谢谢,但在 Mac 上,在与 !foo.dll
相同的行添加注释确实使命令无效。如果我在单独的行上添加评论,它会起作用。
@Giacomo 我在 Windows 上也遇到过,#
应该避免使用。【参考方案2】:
如果你写,Git 会忽略文件夹:
/js
但如果你这样做,它不能添加例外:
!/js/jquery
或 !/js/jquery/
或 !/js/jquery/*
你必须写:
/js/*
只有这样你才能排除这样的子文件夹
!/js/jquery
【讨论】:
这很重要。谢谢! 但是看起来你不能添加嵌套文件夹,例如!/js/jquery/xyzlib
不会被忽略...
正如@Ignorant 所说,您从忽略规则中“排除”的文件夹必须与“*”位于同一位置
所以/js/*
、!/js/jquery
、/js/jquery/*
、!/js/jquery/xyzlib
?感觉是一种相当有趣的方式......
你真的帮了我。【参考方案3】:
您可以简单地git add -f path/to/foo.dll
。
.gitignore
仅忽略用于常规跟踪的文件和 git add .
之类的文件
【讨论】:
更多细节,-f
告诉 git 强制在 repo 中添加这个文件,因为它可能会因为你的.gitignore
而首先忽略它
如果你只有一个文件,那就太好了,如果你需要一个模式,那就没那么有用了
很高兴知道。但是管理 .gitignore 中的所有规则仍然比不知道某些规则在其他地方定义更好,尤其是在团队环境中【参考方案4】:
要排除目录中的所有内容,但某些子目录,请执行以下操作:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
来源:https://gist.github.com/444295
【讨论】:
【参考方案5】:只需在排除规则前添加!
。
根据gitignore man page:
模式具有以下格式:
...
可选前缀!这否定了模式;任何被先前模式排除的匹配文件都将再次包含在内。如果否定模式匹配,这将覆盖较低优先级的模式源。
【讨论】:
【参考方案6】:!foo.dll
在 .gitignore 中,或(每次!)git add -f foo.dll
【讨论】:
【参考方案7】:如果您正在使用 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]/
模式。
【讨论】:
【参考方案8】:解决办法取决于git忽略规则和异常规则的关系:
-
文件/同级文件:使用@Skilldrick solution。
文件夹/子文件夹:使用@Matiss Jurgelis solution。
不同级别的文件/文件或文件/子文件夹:您可以这样做:
*.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
【讨论】:
【参考方案9】:从 Git 2.7.0 开始,Git 会考虑异常情况。来自官方发布说明:
允许后面的“!/abc/def”覆盖前面的“/abc” 出现在同一个 .gitignore 文件中以便于表达 “/abc 目录中的所有内容都将被忽略,除了 ...”。
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt
编辑:显然这在 Git 2.8.0 之后不再起作用
【讨论】:
这对任何人都有效吗?似乎对我不起作用。 ***.com/q/53753201/125507 已删除【参考方案10】:我就是这样做的,每个目录下都有一个 README.md 文件:
/data/*
!/data/README.md
!/data/input/
/data/input/*
!/data/input/README.md
!/data/output/
/data/output/*
!/data/output/README.md
【讨论】:
【参考方案11】:如果您有一个目录并且想要忽略除某些文件之外的所有内容(例如*.py
文件),您可以这样做:
sub-dir/**/*.*
!sub-dir/**/*.py
【讨论】:
以上是关于git忽略异常的主要内容,如果未能解决你的问题,请参考以下文章