git忽略异常

rou*_*sis 295 git gitignore

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

Ski*_*ick 413

使用:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll
Run Code Online (Sandbox Code Playgroud)

来自gitignore:

一个可选的前缀!否定了这种模式; 之前模式排除的任何匹配文件将再次包含在内.如果否定模式匹配,则将覆盖较低优先级模式源.

  • 另见答案形式@Matiss Jurgelis - 这是重要的补充 (19认同)
  • 我可以将异常添加到我的项目的gitignore而不是我的全局gitignore吗?例如,如果我想将所有DLL包含在目录中?我的gitignore_global里面有`*.dll`,而我的项目的gitignore有`!Libs/*.dll`但这似乎没有用. (7认同)
  • @jkinz,你应该尝试 `!Libs/**/*.dll`。 (2认同)
  • 谢谢,但在mac上添加与`!foo.dll`在同一行的注释确实使命令无效.如果我在一个单独的行上添加注释就可以了. (2认同)

Mat*_*lis 231

如果你写的话,Git会忽略文件夹:

/js
Run Code Online (Sandbox Code Playgroud)

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

你必须写:

/js/* 
Run Code Online (Sandbox Code Playgroud)

只有这样你才可以像这样的子文件夹

!/js/jquery
Run Code Online (Sandbox Code Playgroud)

  • **那很重要.**谢谢! (39认同)
  • 但是看起来你不能添加嵌套文件夹,例如`!/ js/jquery/xyzlib`不会被忽略... (3认同)
  • 所以`/ js/*`,`!/ js/jquery`,`/ js/jquery/*`,`!/ js/jquery/xyzlib`?感觉就像一个相当有趣的方式来做... (3认同)
  • 就像@Ignorant所说的,忽略规则中的“除外”文件夹必须与“ *”位于同一位置 (2认同)

Nil*_*ann 53

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

.gitignore 忽略通常跟踪的文件和类似的东西 git add .

  • 只是为了更多的细节,`-f`告诉git强制在repo中添加这个文件,因为它可能会先忽略它,因为你的`.gitignore` (4认同)

小智 17

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

wp-content/*
!wp-content/plugins/
!wp-content/themes/
Run Code Online (Sandbox Code Playgroud)

资料来源:https://gist.github.com/444295


Rob*_*anu 14

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

根据gitignore手册页:

模式具有以下格式:

...

  • 一个可选的前缀!否定了这种模式; 之前模式排除的任何匹配文件将再次包含在内.如果否定模式匹配,则将覆盖较低优先级模式源.


Aid*_*din 7

对于嵌套文件夹,我根据马蒂斯的答案提出了一个解决方案。

假设我想忽略build/目录中的所有内容(位于/app)。所以我这样做:

build/*
Run Code Online (Sandbox Code Playgroud)

但是,如果我想排除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
Run Code Online (Sandbox Code Playgroud)

重要笔记:

  • 所有路径都应/.gitignore
  • 您必须一次对一个子文件夹执行此操作。您可以在 VS Code 中(例如)查看每一步包含的内容和不包含的内容。


Tob*_*ler 5

!foo.dll 在.gitignore中,或者(每次)! git add -f foo.dll


Dea*_*nOC 5

如果您正在使用 Visual Studio 并且您的 .dll 恰好位于一个bin文件夹中,那么您需要先为特定的 bin 文件夹本身添加一个例外,然后才能为 .dll 文件添加例外。例如

!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll
Run Code Online (Sandbox Code Playgroud)

这是因为默认的 Visual Studio.gitignore文件包含一个忽略模式[Bbin]/

这种模式正在清除所有 bin 文件夹(以及它们的内容),这使得任何包含内容的尝试都是多余的(因为文件夹本身已经被忽略)。

我能够通过运行找到为什么我的文件没有被排除在外

git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll
Run Code Online (Sandbox Code Playgroud)

从 Git Bash 窗口。这返回了[Bbin]/模式。