Github - gitignore 文件夹不排除所有目录文件

Posted

技术标签:

【中文标题】Github - gitignore 文件夹不排除所有目录文件【英文标题】:Github - gitignore folder doesn't exclude all directory files 【发布时间】:2019-03-23 18:32:28 【问题描述】:

我在 Windows 10 上使用 Github Desktop。我有一个 .gitignore 文件,我想忽略目录中的所有内容,包括所有子目录。

令人沮丧的是,大多数文件被排除在外,但我仍然得到一些我似乎无法忽略的随机文件。

我有一个目录,比如My Dir/Sub-dir,我想忽略。我还想忽略所有扩展名文件,比如*.swf。因此,我写了这个.gitignore 文件:

My Dir/Sub-dir

*.swf

但是,当我回到 Github Desktop 时,我仍然在列表中得到两个类似以下的文件:

My Dir/Sub-dir/anotherdir/randomfile.xml
My Dir/Sub-dir/animation.swf

发生了什么事?这是一个错误吗?还是我错过了什么?

编辑:

我尝试过的其他替代 .gitignores 是:

My*Dir/Sub-dir
*.swf

 

My\ Dir/Sub-dir
*.swf

 

My Dir/Sub-dir/
*.swf

 

/My Dir/Sub-dir
*.swf

编辑:

所以,我已经在我的文件上尝试了git rm --cached <file> 命令,并且它有效 - 直到其中一个文件再次更改。然后 Github Desktop 再次说他们需要更新。

附言可能是他们以某种方式在主分支中被索引,因为我目前在另一个分支中。这会导致吗?如果是这样,我将如何从所有分支中删除这些文件?

【问题讨论】:

【参考方案1】:

我猜空格可能是个问题。试试

My\ Dir/Sub-dir

My*Dir/Sub-dir

这可能是一个很好的参考.gitignore entire directory with whitespace in name

【讨论】:

是的,这很好。我在网上找到了这个建议并尝试了它。不幸的是,它仍然没有工作......:-/我将编辑我的问题。【参考方案2】:

要忽略特定目录下的所有树,请将尾部斜杠附加到目录:

# Ignore directory at all levels, even if the directory is nested under other directories
My Dir/Sub-dir/
# Ignore the directory only if it exists at the root of your repository
/My Dir/Sub-dir/
# Ignore the sub-directory, no matter where it appears within your repository
Sub-dir/
# Ignore all swf files
*.swf

如果您仍然遇到困难,您的问题可能是您希望忽略的文件已被 git 索引(通过 git add 命令)。如果文件尚未提交,您可以使用git reset -- 'My Dir/Sub-dir/' 从索引中删除它们。如果您的文件已提交,您可以使用 git rm --cached <file> 从索引中删除它们。

【讨论】:

做到了!它只是被缓存了。因此,从 GitHub Desktop (***.com/questions/34565238/…) 找到我的 git install 后,我能够将其从索引中删除。 对不起,我认为它有效..查看我的第二次编辑。也许你会有一个想法。 @Codesmith 从索引中删除它后(通过git rm --cached)你提交删除了吗? 澄清一下,如果有要删除的文件提交到存储库(不删除本地副本),您可以使用git rm --cached 暂缓从存储库中删除该文件。您仍然需要提交该更改才能真正从存储库中删除该文件,并且在进行此提交之前,您可能会看到您的 env(GitHub 桌面)在进行更改时自动重新添加它。另一方面,如果文件还没有提交,那么git reset -- <file> 就可以了。 还只是添加一个注释以澄清上述答案,.gitignore防止 非索引 文件被添加到 repo -- 它不会对已经被索引的文件做任何事情。

以上是关于Github - gitignore 文件夹不排除所有目录文件的主要内容,如果未能解决你的问题,请参考以下文章

.gitignore排除(不忽略)二级以上目录下的文件或目录

.git/info/exclude 的对面 - 包括被 .gitignore 排除的文件

在 Pycharm 中执行 git push 时排除 csv 文件 [重复]

给Git仓库添加.gitignore:清理删除排除被Git误添加的临时文件

如何仅从 Git 的根文件夹中排除文件

.gitignore 文件不起作用