0

所以我的 .gitignore 只是在某个时候停止正常工作,并向我展示了我想忽略的目录中的更改。

  • 是的,我将它保存为 ANSI
  • 文件末尾没有多余的字符
  • .gitinore 位于工作树的根目录中
  • 我已阅读有关此 *** 解决方案的所有信息:

    git rm -r --cached 。混帐添加。git commit -m "修复未跟踪的文件"

它确实在我的机器上完美运行,我做了这三个步骤 - 提交它们 - 我可以在我的机器上在被忽略的目录中进行更改。

问题是,当我将这个提交拉到服务器时,它会删除所有被忽略的东西!并不是说它只是忽略它,而是从服务器中删除文件和目录,因此项目变得无用......

在整个互联网上,这个解决方案似乎是唯一一个破坏 .gitignore 的解决方案,但它不是因为它删除了不应该删除的文件和目录。太傻了,这么蠢的bug早就该删了……

编辑:它发生在不同的路径或文件上,当手动或通过软件将某些东西添加到 .gitignore 时 - 将 gitignore 路径放在这里是没有意义的。<- 这是我提到的错误,而不是我运行一些命令...

4

1 回答 1

4

.gitignore不会删除您服务器上的任何内容。你做到了!

再次阅读您的问题。您已经运行:

git rm -r --cached .
git add .
git commit

第一个命令告诉 Git 从索引中删除所有内容。它基本上准备了一个空的工作树作为下一次提交。

第二个命令将工作目录添加回索引,但是由于您刚刚添加到的行.gitignore,您要忽略的文件不再存在于索引中。

第三个命令只是使您的更改永久化。这意味着您刚刚创建的提交不包含您刚刚添加到的文件.gitignore

发生这种情况是因为这是.gitignore: 它告诉 Git 哪些文件不再跟踪(不再跟踪)。

因为它们在过去被跟踪过,所以文件不会从存储库中删除,它们只是不存在于最后一次提交(以及所有未来的提交)中。您可以在运行后恢复它们git pull

git checkout <commit_id> -- <file_path>

where<commit_id>是包含文件的最后一次提交的哈希(就在您将它们的名称添加到之前.gitignore),并且<file_path>是您想要获取的一个被忽略文件的路径。对每个忽略的文件重复此操作。

于 2018-11-04T19:33:36.233 回答