主存储库中的跟踪文件在子模块中被忽略

Track file in master repository which is ignored in submodule

我有这样的结构:

/.gitignore
/submodule/.gitignore
/submodule/file.txt

在我的子模块中,.gitignore 文件忽略了 file.txt。这对于子模块来说非常合乎逻辑。但是在我的根目录中,我想将 "file.txt" 添加到回购协议中。这可能吗?

!submodule/file.txt

将上面的行添加到 /.gitignore 不起作用。所以对于我的主要回购,我想覆盖并将其添加到 git 但子模块阻止我对文件进行版本控制。

不,你不能那样做。子模块中的任何文件都不能添加到主项目中。跟踪不跟踪无所谓,只是命名空间重叠,无法添加。

如果你真的需要这样做,那么在主存储库的其他目录(不是子模块)中跟踪这个文件,并在你的子模块中创建一个指向它的符号链接。

所以你的结构变成了这样的:

/.gitignore
/submodule/.gitignore
/submodule/symlink_to_others_file.txt
/others/file.txt

实际上来自子模块的 .gitignore 不会影响根存储库,反之亦然。您必须将根存储库和子模块存储库视为 2 个不同的存储库,它们有自己的 .gitignore 文件。因此,如果您将 file.txt 添加到 rootrepo/submodule/.gitignore,您将无法将 file.txt 放置在子模块文件夹下,除非您强制 git 这样做 (git add --force file.txt)。同时你必须完全同意添加 rootrepo/file.txt.