嵌套的 git 存储库从父 git 存储库继承忽略文件。这个可以禁用吗?

gos*_*pes 0 git nested gitignore

我正在一个带有嵌套 git 存储库的 linux 系统上工作。我的文件/目录结构如下:

~/
    .git/
    .gitignore
    file1
    project/
        .git/
        file2
        file3
Run Code Online (Sandbox Code Playgroud)

在我的 homedir 中,我为我的 linux 配置文件创建了一个 repo。忽略文件 (~/.gitignore) 仅包含“*”(排除所有内容)。我用'git add -f file'添加了文件。在嵌套存储库(项目)中,我发现即使在提交时更新了正确的 '(~/project/).git' 目录,所有内容也被排除在外。我已经使用以下命令检查了这一点:

> cd ~/project
> git add file2 
    The following paths are ignored by one of your .gitignore files:
    file2
    Use -f if you really want to add them.
    fatal: no files added

> git check-ignore -v file2
    ~/.gitignore:1:* file2
Run Code Online (Sandbox Code Playgroud)

命令 check-ignore 从版本 1.8.2 开始可用,其动机是 stackoverflow 问题:which gitignore rule is ignoring my file

我的问题是,是否有一种方法可以更改 git 关于忽略文件的行为,以仅处理遇到的忽略文件,直到找到 git 提交的 repo,例如,停止处理目录结构中比第一个“.git”更高的忽略文件找到文件夹(在本例中为 ~/project/.git)。

谢谢!

Chr*_*ris 5

编辑:修改父存储库的忽略文件以使用/*而不是*实际上似乎做你想做的。

话虽如此,帖子的其余部分仍然适用:

我不建议嵌套 Git 存储库,除非它们是相关的,在这种情况下,使用submodules或其许多替代方案是一个好主意。

为了对我的点文件进行版本控制,我将所有想要版本化的文件放入一个专用目录中,例如~/dotfiles,可以安全地进行版本控制。然后我将文件符号链接~/dotfiles到我的主目录中。这有一个额外的好处,我可以通过不链接它们来“禁用”我的一些机器上的单个文件。