我有一个gitignore文件,使git忽略*.dll文件,这实际上是我想要的行为。但是,如果我想要一个异常(即能够提交foo.dll),如何实现呢?

评论

.gitignore
中可能的异常重复
首先,关于此主题的重复答案的祖父-您应该查看的答案很可能是-让.gitignore忽略除少数文件以外的所有内容-非常正常的活动和几个好的答案。我特别喜欢这个答案,这个答案似乎清晰而透彻。

Make .gitignore的可能重复项会忽略除少数文件以外的所有内容

#1 楼

使用:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll


来自gitignore:


可选的前缀!否定了模式;先前模式排除的所有匹配文件将再次包含在内。如果否定的模式匹配,它将覆盖优先级较低的模式源。


评论


另请参阅回复形式@Matiss Jurgelis-这是重要的补充

–丹
15年8月6日在10:08

我可以在项目的gitignore中添加例外,而不在全局gitignore中添加例外吗?例如,是否要在目录中包含所有DLL?我的gitignore_global中有* .dll,而我项目的gitignore中有!Libs / *。dll,但这似乎不起作用。

–乔尔·金泽尔(Joel Kinzel)
15年11月10日在21:20

@jkinz,您应该尝试!Libs / ** / *。dll。

–罗斯伯格·林哈雷斯(Rosberg Linhares)
16年11月9日在20:50

@RosbergLinhares或!** / Libs / *。dll,具体取决于文件夹结构。

– JAB
17年4月4日在20:18

谢谢,但是在Mac上,在与!foo.dll相同的行上添加注释确实使命令无效。如果我在单独的行上添加评论,它将起作用。

– Giacomo
18年7月7日在15:18

#2 楼

如果您编写以下内容,Git会忽略文件夹:

/js


,但如果执行以下操作则无法添加例外:
!/js/jquery!/js/jquery/!/js/jquery/*

您必须写:

/js/* 


,只有这样,您才能删除像这样的子文件夹

!/js/jquery


评论


那很重要谢谢!

– VisioN
16-10-10在16:41

但是看起来您无法添加嵌套文件夹,例如!/ js / jquery / xyzlib不会被忽略...

–无知
17年7月16日在13:19



正如@Ignorant所说,忽略规则中的“除外”文件夹必须与“ *”位于同一位置

–红豌豆
17年9月29日在23:42

那么/ js / *,!/ js / jquery,/ js / jquery / *,!/ js / jquery / xyzlib?感觉像是一种相当有趣的方式...

–灭顶之夜
17年11月23日在1:47

你真的帮了我

–罗耶亚
19 Mar 24 '19在20:33

#3 楼

您可以简单地git add -f path/to/foo.dll

.gitignore仅忽略进行常规跟踪的文件以及类似git add .的东西

评论


只是为了获得更多详细信息,-f告诉git强制在回购中添加此文件,因为由于您.gitignore,它可能首先忽略该文件。

–RPDeshaies
16年4月21日在18:24

如果只有一个文件,这很好,如果需要模式,则没什么用

–利亚姆
16年8月23日在15:46

#4 楼

要排除目录中的所有内容,但排除某些子目录,请执行以下操作:

wp-content/*
!wp-content/plugins/
!wp-content/themes/


源:https://gist.github.com/444295

#5 楼

只需在排除规则之前添加!

根据gitignore手册页:


模式具有以下格式:

。 ..


可选的前缀!否定了模式;先前模式排除的所有匹配文件将再次包含在内。如果否定的模式匹配,则会覆盖优先级较低的模式源。



#6 楼

.gitignore中的!foo.dll,或(每次!)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 ignore规则与异常规则之间的关系:


文件/文件处于同一级别:使用@Skilldrick解决方案。
文件夹/子文件夹:使用@Matiss Jurgelis解决方案。

不同级别的文件/文件或文件/子文件夹:您可以执行以下操作:

*.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”覆盖出现在同一.gitignore文件中的更低版本的“ / abc”容易表达
“ / abc目录中的所有内容都将被忽略,除了...”。


https://raw.githubusercontent.com/git/git/ master / Documentation / RelNotes / 2.7.0.txt
编辑:显然,自Git 2.8.0起,此操作不再起作用

评论


这对任何人有用吗?似乎不适合我。

–安库尔
17年5月3日,0:54

stackoverflow.com/q/53753201/125507这个已删除

– Endolith
20年7月21日在3:30