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/不出现在未跟踪的文件列表中。

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


当前回答

我在Windows中的PowerShell中使用echo“…”>.gitignore创建了.gitignor,因为它不允许我在Windows资源管理器中创建它。

在我的案例中,问题是创建的文件的编码,在我将其更改为ANSI后,问题得到了解决。

其他回答

这里其他答案没有涉及的一个棘手问题是,如果您有内联注释,.gitignore文件将无法工作,如下所示:

foo/bar # The bar file contains sensitive data so we don't want to make this public

因此,如果您确实有这样的评论,请这样更改它们:

# The bar file contains sensitive data so we don't want to make this public
foo/bar

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

git rm -r --cached debug.log nbproject

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

特别适用于Windows用户:如果您有未跟踪的文件,并且无法清除/删除缓存的文件。尝试打开PowerShell并将.gitignore文件转换为UTF-8编码:

$Myfile = Get-Content .\.gitignore`
$Myfile | Out-File -Encoding "UTF8" .gitignore

您只需要这样做一次,就可以对该目录的.gitignore文件进行编码,并且由于该文件随后被正确编码,因此无论您将来何时编辑该文件,它都会正常工作。我认为这是由于GitHub无法读取.gitignore文件的非UTF-8编码而出现的问题。据我所知,Windows尚未解决此问题。这没什么大不了的,只是当它不工作时调试起来很痛苦。

我注意到.gitignore的编码产生了影响——如果文件是Unicode,它会被忽略,如果是ASCII,它不会被忽略。

流程:

验证状态:PS>git状态创建一个函数以获取文件编码Test.gitignore的编码:PS>Get-FileEncoding.gitignor将编码更改为ASCII:PS>Set-Content.gitignore-encoding ASCII-Value(Get-Content.gitignore)确认:PS>git状态

即使到目前为止你还没有跟踪这些文件,Git似乎也可以在你将它们添加到.gitignore之后“知道”它们。

警告:首先提交或隐藏当前更改,否则您将丢失它们。

然后从Git存储库的顶部文件夹运行以下命令:

git rm -r --cached .
git add .
git commit -m "fixed untracked files"