Git似乎忽略了我的.gitignore文件-.gitignorefile是否已损坏?Git希望使用哪种文件格式、区域设置或文化?

我的.gitignore:

# This is a comment
debug.log
nbproject/

git状态的输出:

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       debug.log
#       nbproject/
nothing added to commit but untracked files present (use "git add" to track)

我希望debug.log和nbproject/不出现在未跟踪的文件列表中。

我应该从哪里开始解决这个问题?


当前回答

每当我遇到git正在跟踪.gitignore中列出的文件的情况时,我会使用以下方法:

git update-index --skip-worktree <file_name>

其他回答

在不向项目添加另一个提交的情况下,一行代码就足以让.gitignore按预期工作:

git rm -r --cached debug.log nbproject

这将从存储库中删除它们,但仍保留它们。简单地说,它会删除与它们相关的任何更改历史记录,并且不会在将来的任何提交中跟踪它们的更改。你可以在这里找到更好的解释。

这里有很多答案,但对我有用的并不完全是某个特定的答案,我在这里以简单的方式逐一记下所有需要完成的步骤:

预---备份回购以备不时之需。(我没有,但可能会让你觉得更安全)

确保这是您的第一次提交还是更早的提交,这些文件已被添加,因此已被缓存。如果是,则git-rm-cached。和gitadd。(不要错过点)如果仍然无法工作,请在记事本中打开文件转到文件->另存为将编码更改为ANSI。(有些答案错误地说UTF-8,但它不起作用,不必要地浪费时间)再次使用git-rm-cached。和gitadd。(不要错过点)现在做Git状态并验证我们想要的结果

此问题的另一个原因是语句前的空格或制表符:

例子:

# Be aware of the following:
 notWorkingIgnore.*
workingIgnore.*

正如下面的评论所指出的,尾随空格也是一个问题:

# Be aware of the following:
notWorkingIgnore.* #<-Space
workingIgnore.*#<-Nospace

我的30美分把戏:

请清理您的目录。git clean-f(我尝试了git rm-r--cached。但它对我不起作用。)

警告:gitclean-f将删除未跟踪的文件,这意味着它们将永远消失,因为它们没有存储在存储库中。在执行此操作之前,请确保确实要删除所有未跟踪的文件。

也许你可以尝试gitclean-xdf,它可以删除被忽略的目录和未跟踪的文件

现在将HEAD带到当前位置git重置HEAD——硬。检查git状态。现在创建.gitignore,在我的情况下,它希望忽略一个名为data的文件夹。所以我写了/data/(首字母/表示文件/文件夹,后字母/仅表示文件夹)。现在执行gitadd、commit和push。

还有一点需要注意:您是否使用正确的行结尾保存.gitignore文件?

窗户:

如果您在Windows上使用它,是否使用Windows行结尾保存它?并非所有程序都会默认执行此操作;Notepad++和许多PHP编辑器默认使用Linux行结尾,因此文件将与服务器兼容。检查此项的一个简单方法是在Windows记事本中打开文件。如果所有内容都显示在一行,则文件以Linux行结尾保存。

Linux:

如果文件在Linux环境中工作时遇到问题,请在Emacs或nano等编辑器中打开该文件。如果您看到任何不可打印的字符,则文件以Windows行结尾保存。