如何仅从 Git 的根文件夹中排除文件

Posted

技术标签:

【中文标题】如何仅从 Git 的根文件夹中排除文件【英文标题】:How to exclude file only from root folder in Git 【发布时间】:2011-04-07 22:47:54 【问题描述】:

我知道使用.gitignore 文件来排除一些正在添加的文件,但是我在源代码树中有几个config.php 文件,我只需要排除一个位于根目录中的文件,而其他文件则处于修订控制之下。

我应该写什么到.gitignore 来实现这一点?

【问题讨论】:

【参考方案1】:

来自documentation:

如果模式不包含斜杠 /,git 将其视为 shell glob 模式并检查与 .gitignore 文件位置相关的路径名是否匹配(如果不是来自,则相对于工作树的顶层.gitignore 文件)。

前导斜杠匹配路径名的开头。例如,“/*.c”匹配“cat-file.c”,但不匹配“mozilla-sha1/sha1.c”。

所以你应该将以下行添加到你的根.gitignore

/config.php

【讨论】:

谢谢!我以这种方式尝试过,但由于某种原因它没有奏效。可能在某处打错了 =) 如果它不是一个文件,而是一个文件夹,我想忽略 repo root 中的那个文件夹,它包含的文件和所有后代子文件夹及其文件怎么办? /folder/? /folder//folder 都可以,但在末尾添加斜线会将匹配限制为仅文件夹。如果根目录中有一个名为 'foo' 的文件,/foo/ 不会忽略它,但/foo 会。 如果你已经提交了文件,运行命令git rm --cached <file>,否则文件不会被忽略。来自:***.com/a/1274447【参考方案2】:

使用/config.php

【讨论】:

【参考方案3】:

旧版本的 git 要求您首先定义一个忽略模式,然后立即(在下一行)定义排除项。 [在版本 1.9.3 (Apple Git-50) 上测试]

/config.php
!/*/config.php

以后的版本只需要以下[在版本 2.2.1 上测试]

/config.php

【讨论】:

【参考方案4】:

如果上述解决方案不适合你,试试这个:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php

【讨论】:

这确实对我有用,而 /config.php 单独没有。我很好奇为什么没有。你有什么想法吗? @iago-lito 如果您从事某个特定项目并努力解决如何忽略某个特定目录中的某些 file.ext 并同时在其他任何地方不忽略它然后将其放入 / home/me/.gitignore 文件:/home/me/path/to/my/project/some/folder/file.ext 或 file.ext 忽略该文件无处不在,然后在 /home/me/path/to/ my/project/some/folder/.gitignore 文件把这个 !file.ext 放在这个特定的目录中,不要忽略这个文件。每个文件夹都可以有自己的 .gitignore 文件来覆盖任何父 .gitignore 文件设置... 嗯。这意味着根据其他用户在他们自己的机器上是否有不同的~/.gitignore 文件,repo 的行为可能会有所不同,对吧?.. 此外,我的观点是:你写了“如果上述解决方案不起作用”,为什么不? 是的,如果您的项目可能存在于未知环境中,那么您永远不应依赖项目根文件夹上方的 .gitignore 文件。请记住,像 config.php 这样的文件名很常见,因此请覆盖根 .gitignore 文件中此文件的任何可能现有设置。 @iago-lito'consideringleaving 见***.com/a/28000594/362021【参考方案5】:

wordpress 网站的示例,但基本上忽略所有内容,然后添加以 ! 开头的异常。包括什么

# Ignore everything in the root except the "wp-content" directory.
/*
!.gitignore
!wp-content/
!wp-config.php
#
# # Ignore everything in the "wp-content" directory, except the "plugins"
# # and "themes" directories.
wp-content/*
!wp-content/plugins/
!wp-content/themes/
#
# # Ignore everything in the "plugins" directory, except the plugins you
# # specify (see the commented-out examples for hints on how to do this.)
wp-content/plugins/*
# # !wp-content/plugins/my-single-file-plugin.php
# # !wp-content/plugins/my-directory-plugin/
#
# # Ignore everything in the "themes" directory, except the themes you
# # specify (see the commented-out example for a hint on how to do this.)
wp-content/themes/*
!wp-content/themes/twentyeleven/

【讨论】:

以上是关于如何仅从 Git 的根文件夹中排除文件的主要内容,如果未能解决你的问题,请参考以下文章

仅从 git 提交中删除文件

我们如何仅从hdfs联合中的一个名称空间中排除某些数据节点?

如何在 git 中列出所有排除的文件? [复制]

如何从 git grep 搜索中排除某些目录/文件

如何从 git 中排除打字稿编译的文件

TFS 2015:如何排除某些文件夹触发使用 Git 构建