【问题标题】:How to .gitignore files recursively如何递归 .gitignore 文件
【发布时间】:2013-05-09 04:15:17
【问题描述】:

我试图在我的 .gitignore 文件中避免以下模式。

MyPrject/WebApp/Scripts/special/*.js
MyPrject/WebApp/Scripts/special/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*/*/*.js

我们试过了:

MyPrject/WebApp/Scripts/special/**.js
MyPrject/WebApp/Scripts/special/**/*.js

然而这并没有奏效。这是 Windows 上的 git。有没有更简洁的方法来做到这一点而无需重复?

【问题讨论】:

标签: git gitignore


【解决方案1】:

以下 gitignore 手册页:

[...] git 将模式视为适用于 fnmatch(3) 使用 FNM_PATHNAME 标志:通配符在 该模式与路径名中的 / 不匹配。

因此,这清楚地表明无法在两个字符串之间指定一定数量的目录,例如在specialjs 之间。

尽管如此,您可以在每个目录中拥有一个 .gitignore 文件,因此在您的情况下可能包含以下内容

*.js

在下面的地方

MyPrject/WebApp/Scripts/special/.gitignore

够了吗?

【讨论】:

  • 我以前有MyPrject/WebApp/Scripts/special*.js,它匹配MyPrject/WebApp/Scripts/specialfile.js 以及MyPrject/WebApp/Scripts/special/a/b/c/file.js。但是,由于某种原因,行为发生了变化,我目前的解决方法是单独列出目录。我正在使用适用于 Windows 的 GitHub。
  • 例如find MyPrject/WebApp/Scripts/special -type d -printf 'echo "*.js" >> %h/.gitignore\n git add %h/.gitignore\n' | sh
【解决方案2】:

从 git 1.8.2 开始,这个:

MyPrject/WebApp/Scripts/special/**/*.js

应该按照this answer工作。它也适用于我在 Windows 7 中使用 Sourcetree 1.6.12.0 和它安装的 git 版本 (1.8.4-preview20130916)。

递归地 gitignore 目录下的每个文件和文件夹:

MyPrject/WebApp/Scripts/special/**

【讨论】:

  • 在 git 1.8 之前呢?
  • 如果此答案不起作用(在 Windows 上),请在开头添加字符 /。示例:/MyProject/WebApp/Scripts/special/**/*.js
  • 当我的答案实际上是指向另一个答案的链接时,我的答案不断得到支持,这让我很尴尬。
  • @puk : 这个问题中的.gitignore 位于repo 根目录(/Webapp 的父目录)。
  • 您的答案看起来不错,但在 Windows 10 上使用 git 1.9.1 对我不起作用,因为在以下情况下忽略除 js 之外的所有文件:(第一行)foo/bar/*/*(第二行)@987654329 @ 它只适用于一级子目录,但不能递归。
【解决方案3】:

这适用于我在 osx 上。

lib64/**/__pycache__/
lib/**/__pycache__/
*.py[cod]
.ipynb_checkpoints/
**/.ipynb_checkpoints/
.DS_Store
**/.DS_Store

【讨论】:

  • 我不小心对您的答案投了反对票,除非您进行编辑,否则我无法修复它。如果您可以编辑它并只需放置一个空格或下一行。我会修正投票。
【解决方案4】:

尝试执行git rm -r --cached MyPrject/WebApp/Scripts/special/ 您提到的目录可能已被 git 缓存,并将显示在未跟踪的文件中。 清除缓存后,确保您在 .gitignore 上提及它。

【讨论】:

    猜你喜欢
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2012-05-31
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多