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

时间:2013-12-19 08:53:05

标签: git nested gitignore

我正在使用嵌套git存储库的linux系统。我的文件/目录结构如下:

~/
    .git/
    .gitignore
    file1
    project/
        .git/
        file2
        file3

在我的homedir中,我为我的linux配置文件创建了一个repo。忽略文件(〜/ .gitignore)仅包含'*'(排除所有内容)。我添加了'git add -f file'文件。在嵌套的repo(项目)中,我发现尽管在提交时更新了正确的'(〜/ 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

命令check-ignore从版本1.8.2开始提供,并受stackoverflow问题的推动:which gitignore rule is ignoring my file

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

谢谢!

2 个答案:

答案 0 :(得分:2)

编辑:修改父资料库的忽略文件以使用/*代替*,实际上似乎做了你想做的事。

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

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

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

答案 1 :(得分:2)

似乎我在我的bash配置文件中的某处添加了“git config --global core.excludesfile'~ / .gitignore'”。从bash配置文件和'〜/ .gitconfig'中删除它后解决了这个问题。我得出结论,忽略文件不会被继承! :)