git忽略异常


326

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



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

Answers:


447

采用:

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

gitignore

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


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

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

1
@jkinz,您应该尝试!Libs/**/*.dll
Rosberg Linhares

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

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

260

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

/js

但如果你不能添加例外: !/js/jquery!/js/jquery/!/js/jquery/*

您必须写:

/js/* 

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

!/js/jquery

43
那很重要 谢谢!
VisioN

3
但是,您似乎无法添加嵌套文件夹,例如!/js/jquery/xyzlib将不会被忽略...
无知

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

3
所以/js/*!/js/jquery/js/jquery/*!/js/jquery/xyzlib?感觉像是一种相当有趣的方式...
不灭之夜

你真的帮了我
罗耶亚

55

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

.gitignore 仅忽略用于常规跟踪的文件和类似 git add .


4
只是为了获得更多详细信息,-f告诉git强制在回购中添加此文件,因为它可能会首先因为您的.gitignore
注意

如果您只有一个文件,那就太好了;如果您需要一个模式
Liam




4

如果您使用的是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]/模式。


2

解决方案取决于gitignore规则和异常规则之间的关系:

  1. 文件/文件在同一级别:使用@Skilldrick解决方案
  2. 文件夹/子文件夹:使用@Matiss Jurgelis解决方案
  3. 文件/不同级别的文件或文件/子文件夹:您可以执行以下操作:

    *.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
    

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.