是否可以忽略子目录中的.gitignore规则?

jeo*_*eon 70 git

我想忽略子目录中的所有.gitignore规则,但root中的.gitignore规则除外.

例如)我已经.gitignore在目录结构中存档了/a.

并且还有.gitignore文件/a/b.假设/aa.txt b.txt文件.

/a/b.config文件..gitignore定义.config/a/b.

.config文件将被忽略.gitignore/a/b.

但我真的想.config通过忽略.gitignore子目录中的规则来跟踪文件.

可能吗?

提前致谢

sig*_*ine 118

您的问题不太清楚,但如果您想要不同的gitignore规则的子目录,您可以在该目录中创建一个新的.gitignore.

说你有:

project/.gitignore
project/stuff/.gitignore

stuff /中的.gitignore将覆盖根目录中的.gitignore.

git help gitignore或者man gitignore有更多关于可能性的信息.

  • 是的,如果这是个问题,那么可以在链条的下方对.gitignore中的规则进行否定.`"一个可选的前缀!它取消了模式;先前模式排除的任何匹配文件将再次包含在内."` (44认同)
  • @signine不适用于目录.见[我的回答](http://stackoverflow.com/a/36108231/624787). (3认同)
  • 我认为OP询问你是否有一个目录结构`/ a/b/c`并在`/ a/b`中更新`.gitignore`,是否可以在`/ a/b/c`中忽略`/ a/b`中的规则,而只使用`/ a`中的规则. (2认同)
  • 我认为更准确的说法是:“内部 .gitignore”将与具有更高优先级的“外部 .gitignore”合并,而不是简单地覆盖。 (2认同)

Nic*_*kiy 33

假设您想要包含node_modules在您的存储库中,但是某些模块.gitignore本身就有.您可以通过将以下内容添加到根.gitignore文件来否定规则:

# Make sure to include everything in node_modules.
!node_modules/**
Run Code Online (Sandbox Code Playgroud)

  • 有没有更通用的方法来做到这一点?假设我有`node_modules/mod1`,`node_modules/mod2`都是.gitignore,忽略了那些内部更深的`node_modules`(如`node_modules/mod1/node_modules`.我经常添加和删除模块我不太清楚并且手动添加规则来忽略`node_modules/mod1/.gitignore`或者一直手动添加`!node_modules/mod1/node_modules`.基本上我正在尝试部署一个流星应用程序和所有嵌入式`.gitignores`让人无法用git获取所有内容. (3认同)

Ros*_*son 9

这里问题的关键是排除父目录.来自$ man gitignore:

如果排除该文件的父目录,则无法重新包含文件.出于性能原因,Git不会列出排除的目录,因此无论在何处定义,所包含文件的任何模式都不起作用.

这就是我如何让它发挥作用.鉴于:

/a/...
/b/foo
/c/...
Run Code Online (Sandbox Code Playgroud)

/.gitignore:

/*
!/b
Run Code Online (Sandbox Code Playgroud)

然后/b/foo将显示为包含的文件,而一切/a/c将被排除在外.权衡的是,您必须为要包含文件的任何目录的所有父项添加否定.


小智 6

据我所知,没有办法做到这一点.由于本地.gitignore将覆盖根ginignore我的解决方法是手动添加.

git add --force [ your file and folder]
Run Code Online (Sandbox Code Playgroud)