父模块的.gitignore影响子模块的添加和提交

时间:2019-08-02 18:09:17

标签: git

在主目录中,我有一个git存储库来跟踪配置文件,例如.zshrc,.vimrc。 .gitignore文件排除所有这些指定文件以外的文件。

在我的〜/ Desktop /目录中,我克隆了另一个项目,该项目具有自己的.gitignore。但是,当我在此子模块中创建新文件并尝试添加并提交它们时。它总是说“没什么可做的,工作得很干净”

我尝试删除父模块的.gitignore,子模块可以添加并提交。这意味着我的子模块的“ git add”受父模块的.gitignore影响。我还尝试创建虚拟的嵌套存储库,父目录的.gitignore不会影响其子存储库。现在,我对这种不同的行为感到困惑。

这是父母的.gitignore

# Ignore everything
*

# But not these files:
!.gitignore
!.zshrc
!.bash_profile
!.vimrc

2 个答案:

答案 0 :(得分:1)

TL; DR

运行

git config --global core.excludesFile <file name for global ignore patterns>

详细信息

根据我的经验,主目录中的.gitignore全局适用。

经过研究,我发现设置core.excludesFile定义了一个忽略文件,该文件将在每个沙箱中读取。在我的Linux机器上,默认设置为~/.gitignore,而在我的Windows机器上,默认设置为其他位置。

对于您来说,它显然在您的家中,因此您需要对其进行更改,以便您的家Git repo的.gitignore也不是您的全局对象:

git config --global core.excludesFile ~/.gitignore.global

现在,如果您想在各处忽略某些内容,请将它们放在该文件中,而您的~/.gitignore仅适用于家庭Git存储库本身。

答案 1 :(得分:1)

摘要

发生此问题是因为默认情况下,在Linux和MacOS(@joanis)上,〜/ .gitignore 文件会影响全局

在这种情况下,不会产生全局影响。我将全局gitignore文件的路径更改为~/.gitignore_global,并在该路径处创建了一个空的.gitignore_global文件。 ~/.gitignore保持不变。谢谢大家的帮助〜

检查全局git忽略文件的路径

使用

git config --get core.excludesfile

输出显示全局git忽略文件的路径,默认情况下为~/.gitignore

更改默认的全局.gitignore

如果要更改默认的全局.gitignore,可以使用

git config --global core.excludesfile '~/.gitignore_global'

以上将全局默认git ignore文件的 path 更改为~/.gitignore_global

如果现在查看~/.gitconfig文件,我们将找到

[core]
  excludesfile = ~/.gitignore_global

对于调试:检查哪个.gitignore影响特定文件

如@jthill所述,使用

git check-ignore -nv path/to/whatever

上述命令的输出解释为here。如果显示:: path/to/whatever表示文件或目录不受任何git忽略模式的影响,将在执行git add theFile时添加。