为什么.gitignore停止工作?几次提交后总是停止

时间:2018-11-04 19:21:12

标签: git gitignore

所以我的.gitignore有时会停止正常工作,并向我显示我要忽略的目录更改。

  • 是的,我将其另存为ANSI
  • 文件末尾没有多余的字符
  • .gitinore位于工作树的根目录中
  • 我已经阅读了有关this *** solution的所有信息:

    git rm -r --cached。 git添加 git commit -m“固定的未跟踪文件”

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

问题是,当我将该提交提交到服务器时,它将删除所有被忽略的内容!不只是它会忽略它,它还会从服务器中删除文件和目录,因此该项目变得毫无用处...

在整个互联网上,此解决方案似乎是唯一的.gitignore损坏解决方案,但并非如此,因为它删除了不应删除的文件和目录。这真是愚蠢,这种愚蠢的错误应在很久以前就删除...

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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

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

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

由于它们过去已被跟踪,因此文件不会从存储库中删除,它们只是在上一次提交(以及以后的所有提交)中不存在。您可以在运行git pull后通过运行以下命令来恢复它们:

git checkout <commit_id> -- <file_path>

其中<commit_id>是包含文件的最后一次提交的哈希值(在将文件名添加到.gitignore之前),而<file_path>是您要忽略的一个文件的路径得到。对每个忽略的文件重复此操作。