尽管将文件添加到 .gitignore,但文件不会被忽略

Arn*_*Gee 3 git github gitignore

我想忽略git 项目workspace文件夹内的文件。为此.obsidian/我修改了我的文件。.gitignore

\n

这是我的 .gitignore 文件:

\n
 .obsidian/cache\n .obsidian/workspace\n .trash/\n .DS_Store\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当文件更改时我仍然收到此消息:

\n
 .obsidian/cache\n .obsidian/workspace\n .trash/\n .DS_Store\n
Run Code Online (Sandbox Code Playgroud)\n

我不知道为什么会发生这种情况或该怎么办。

\n

tor*_*rek 6

.obsidian/workspace是一个跟踪文件。被跟踪的文件永远不会被忽略。

\n

跟踪文件是当前位于 Git 索引中的任何文件。

\n

Git 的索引最初是从您签出的提交中填充的。因此,如果某个文件存在于某个提交中,并且您git checkout提交了该git switch文件,那么该文件就会从该提交进入 Git 的索引。它现在位于 Git 的索引中,并且根据定义,它会被跟踪。请注意,在此签出/切换操作期间,Git 会同时填充其索引工作树。

\n

您可以随时操作 Git 索引中的文件:

\n
    \n
  • 在工作树中的某个文件上运行git add\xe2\x80\x94这是您可以查看和编辑的文件版本\xe2\x80\x94将该文件的任何现有副本踢出Git\的索引,然后将工作文件的树版本放入 Git 的索引中。所以现在索引和工作树副本匹配。该文件也会被跟踪,因为它存在于 Git 的索引中。

    \n
  • \n
  • git rm对 Git 索引和工作树中的某个文件运行,从 Git 索引中删除该文件的副本,并从工作树中删除该文件的副本。该文件现已完全消失,因此不会被跟踪。

    \n
  • \n
  • git rm --cached对同时位于 Git 索引和工作树中的某个文件运行,会从 Git 索引中删除该文件的副本,但将该副本保留在工作树中。该文件现在根据定义未被跟踪,因为它存在于您的工作树中,但不再存在于 Git 的索引中。

    \n
  • \n
  • 最后\xe2\x80\x94这是多余的,但值得注意\xe2\x80\x94如果你删除了两个地方的某个文件的工作树副本,然后git add在该文件上使用,Git将从其索引中删除该副本。git rm所以这与该文件上的(without )具有相同的效果--cached

    \n
  • \n
\n

当您运行时git commit, Git\xe2\x80\x94此时\xe2\x80\x94会冻结 Git\ 索引中存在的每个文件的快照副本,与 Git\ 索引中显示的完全相同。这些是进入新提交的文件。因此索引始终保存您建议包含在下一次提交中的文件。这就是为什么当您签出该提交时,Git 会填充当前提交的索引:以便建议的一个提交与您刚刚签出的当前提交相匹配。1

\n

如果您希望忽略某个文件,但当前正在跟踪该文件,则必须从 Git 索引中删除该文件。但请注意,如果该文件存在于某些现有提交中,则这些提交将继续包含该文件。 从 Git 索引中删除该文件后,您所做的新提交将忽略该文件。将现有提交与提交进行比较将显示该文件已被删除。

\n

如果您检查过包含该文件的较旧提交之一,然后切换到缺少该文件的较新提交之一,Git 将删除文件\xe2\x80\x94 因为这就是较旧和较新之间的区别犯罪!因此,删除不应该提交的文件后要小心。现有的提交确实有该文件,即使它们不应该有。检查包含该文件的较旧的现有提交将来会带来痛苦。

\n
\n

1这里有一些特殊情况:请参阅当当前分支上有未提交的更改时签出另一个分支以获取详细信息。

\n

  • 简而言之,在该文件/文件夹上使用“git rm --cached”,然后将其添加到“.gitignore”文件中。 (5认同)