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

时间:2015-06-05 06:12:42

标签: git git-submodules gitignore

我有这样的结构:

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

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

!submodule/file.txt

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

2 个答案:

答案 0 :(得分:1)

不,你不能那样做。子模块中的任何文件都无法添加到主项目中。无论是否跟踪它都无关紧要,因为命名空间重叠,所以无法添加。

如果您确实需要这样做,请在主存储库中的某个其他目录(不是子模块)中跟踪此文件,并在子模块中为其创建符号链接。

所以你的结构就像:

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

答案 1 :(得分:1)

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