【发布时间】:2022-10-03 10:11:30
【问题描述】:
我的 .gitignore 文件似乎没有忽略我想要的所有文件。
==================上下文==================
在我的 git repo 中,我有几个子目录,类似于这个简化的示例:
git base folder
> .gitignore
> Folder A
> Folder B
> Subfolder B0
>SubSubfolder B0a
> Files
> Subfolder B1
> SubSubfolder B1a
> Files
> File B1b.ft0
> File B1c.ft0
> File B1d.ft1
> File B1e.ft2
> Etc
我想忽略子文件夹B1 中的所有文件除了(比如说)文件B1b.ft0 和文件B1e.ft2。我还想忽略子子文件夹B1a 和B0a 中的所有文件。
在我的 .gitignore 文件(只有一个)中,我有以下几行:
#Ignore:
B1/**
B1a/
B0a/
#Include
!B1/B1b.ft0
!B1/B1e.ft2
然而,全部包含子文件夹B1 中的文件。子子文件夹B1a 中的文件是忽略,但是子子文件夹 B0a 中的文件是不是.
============== 尝试的解决方案 ==============
我决定首先解决子文件夹B1 中未忽略文件的问题:
我在.gitignore 文件中尝试了B1/,但这忽略了那里的所有文件,包括我想要保留的文件。
我还尝试了B1/* 和B1/*.*,但它们都无法忽略文件夹B1 中的其他文件。
然后我尝试手动列出我想忽略/保留在此文件夹中的所有文件。这行得通,但是有很多文件,它们可能会改变。我不想使用这个选项。
==================方法==================
在测试每个选项是否有效时,我使用了git check-ignore -v <filename> 和git status --ignore。我还使用git rm --cached -r . 后跟git add -A 来清除被忽略文件的存储库。 (子问题:我需要提交.gitignore 才能生效吗?)
==================总结==================
我对此越来越感到困惑和烦恼,有人可以帮助我吗? (我是否只需要在整个地方应用大量的 *\'s 就可以自动开始工作,as in this question?)
还请解释为什么以及如何,您的解决方案有效,而我的解决方案却没有(如果您知道的话)。
-
您要忽略的文件已被跟踪?那么
.gitignore对他们没有影响。此外,无需编写规则来跟踪您要跟踪的目录中的 2 个文件几乎忽视。只需忽略目录,然后git add -f要跟踪的文件,不管规则是否忽略它们。 -
不......无需提交
.gitignore即可生效。它的效果是立竿见影的,无论它是否被跟踪/未跟踪/等等。