2023-10-29 08:00:06

Git忽略异常

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


当前回答

你可以简单地添加-f path/to/foo.dll。

.gitignore只忽略通常跟踪和git添加之类的文件。

其他回答

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

根据gitignore手册页:

模式有以下格式: ... 一个可选的前缀!这就否定了模式;任何被前一个模式排除的匹配文件将被重新包含。如果匹配一个否定的模式,这将覆盖低优先级的模式源。

Use:

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

从gitignore:

一个可选的前缀!这就否定了模式;任何被前一个模式排除的匹配文件将被重新包含。如果匹配一个否定的模式,这将覆盖低优先级的模式源。

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

你可以简单地添加-f path/to/foo.dll。

.gitignore只忽略通常跟踪和git添加之类的文件。

对于嵌套文件夹,我根据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中看到(例如)它在每一步都包含什么和不包含什么。