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)。
谢谢!
编辑:修改父存储库的忽略文件以使用/*
而不是*
实际上似乎做你想做的。
话虽如此,帖子的其余部分仍然适用:
我不建议嵌套 Git 存储库,除非它们是相关的,在这种情况下,使用submodules
或其许多替代方案是一个好主意。
为了对我的点文件进行版本控制,我将所有想要版本化的文件放入一个专用目录中,例如~/dotfiles
,可以安全地进行版本控制。然后我将文件符号链接~/dotfiles
到我的主目录中。这有一个额外的好处,我可以通过不链接它们来“禁用”我的一些机器上的单个文件。