.gitignore 被 Git 忽略

我的.gitignore文件似乎已被 Git 忽略.gitignore文件是否已损坏? Git 需要哪种文件格式,语言环境或文化?

我的.gitignore

# This is a comment
debug.log
nbproject/

git status输出:

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

我应该从哪里着手解决此问题?

答案

即使到目前为止您尚未跟踪文件,即使将它们添加到.gitignore ,Git 似乎也能够 “知道” 它们。

注意:首先提交您当前的更改,否则您将丢失它们。

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

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

如果 Git 似乎没有注意到您对.gitignore文件所做的更改,则可能需要检查以下几点:

  • 可能存在一个全局.gitignore文件,该文件可能会干扰您的本地文件
  • 将某些内容添加到. gitignore 文件时,请尝试以下操作:

    git add [uncommitted changes you want to keep] && git commit
    git rm -r --cached .
    git add .
    git commit -m "fixed untracked files"
  • 如果您从. gitignore 文件中删除了某些内容,并且上述步骤可能不起作用,如果您发现上述步骤不起作用,请尝试以下操作

    git add -f [files you want to track again]
    git commit -m "Refresh removing files from .gitignore file."
    
    // For example, if you want the .java type file to be tracked again,
    // The command should be:
    //     git add -f *.java

固定。好的,我在 Windows 的记事本中创建了. gitignore 文件,但该文件无法正常工作。当我在 Linux 上查看. gitignore 文件时,它看起来像是乱七八糟的东西 - 也许记事本写出了 Unicode 而不是 ASCII 或任何 8 位。

因此,我将文件重写了 Linux 上的文件,当我将其拉回到 Windows 时,它运行良好!欢呼!

无需在项目中添加其他提交,只需一行就可以使.gitignore正常工作:

git rm -r --cached debug.log nbproject

这会将它们从存储库中删除,但仍然保持物理状态。用简单的英语,它将删除与它们相关的任何更改历史记录,并且在以后的任何提交中都不会跟踪它们的更改。您可能会在这里找到更好的解释。

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

例:

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

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

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

我注意到.gitignore的编码起了作用 - 如果文件是 Unicode,它将被忽略,如果是 ASCII,则没有。

处理:

  1. 验证状态: PS> git status
  2. 创建一个函数来获取文件编码
  3. 测试.gitignore的编码: PS> Get-FileEncoding .gitignore
  4. 将编码更改为 ASCII: PS> Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)
  5. 确认: PS> git status

与其他解决方案一样,请首先提交,并注意您丢失所有未提交的更改。

我得到了更好的结果:

git rm -r --cached .
git reset HEAD --hard
git status

请注意,状态现在不应包含任何已修改的文件。

就我而言,这是因为文件已存在于存储库中,而我正试图忽略它。

这些是我为解决此问题所做的事情:

  • 将文件复制到一个临时文件夹
  • 从我的项目文件夹中删除它们。
  • 提交更改,从存储库中删除这些文件
  • 将这些文件重新添加到我的项目文件夹中

到那时,我对这些文件所做的任何更改都将被忽略。

我认为您不能忽略存储库中已经存在的文件。

这里所有的答案实际上都是解决方法。您需要运行git init 之前创建. gitignore 文件。否则git将永远不会知道您需要忽略那些文件,因为它们已经被跟踪。

echo .idea/ >> .gitignore
git init

如果您每天进行开发,建议您将惯常的忽略文件添加到~/.gitignore_global文件中。这样, git将已经知道您通常忽略哪些文件(意为 “您的用户”,因为它是您的主目录中的文件)。

还要检查放置.gitignore目录

它应该在您项目的根目录中

./myproject/.gitignore

不在

./myproject/.git/.gitignore