.gitignore -- 跟踪文件和目录的特定子目录

.gitignore -- track files AND specific subdirectories of directory

在将其标记为无法控制的重复之前,我查看了十几个 Stack Overflow 问题,其中 none 对我的案例有效。

root/
├── trackdir1/          # track directory and its subdirectories
├── trackdir2/          # track directory and its subdirectories
├── ignoreddir/         # ignore all other subdirectories of root
├── .../
└── *                   # keep all FILES within root

我有一个目录(实际上是几个目录,但我们假设它是 root)。我想跟踪 root 中的所有文件和 root 的某些特定子目录,但忽略所有其他子目录。

我看过的所有 Stack Overflow 问题都是这样或那样:包含文件但忽略子目录,或者包含特定子目录但忽略文件。

根据我对.gitignore的理解(明显欠缺),我需要对root里的文件做一个例外,对我要跟踪的具体子目录做例外,然后排除这些文件在根目录下的所有子目录下。

!/*
!/trackdir1/
!/trackdir1/**
!/trackdir2/
!/trackdir2/**
/*/**

但是,此模式仍然不包括 trackdir1trackdir2。我也试过 !/trackdir1!/trackdir1/*.

我做错了什么?

.gitignore 文件的内容按顺序处理,后面的指令覆盖前面的指令。例如,这里 /*/** 覆盖 !/trackdir2/**

只需将 /*/** 放在首位即可:

/*/**
!/*
!/trackdir1/
!/trackdir1/**
!/trackdir2/
!/trackdir2/**