.gitignore被Git忽略了

.gitignore is ignored by Git

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

我的.gitignore

1
2
3
# This is a comment
debug.log
nbproject/

git status输出:

1
2
3
4
5
6
7
8
9
# 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/不要出现在未跟踪文件列表中。

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


即使到目前为止您还没有跟踪这些文件,Git似乎能够"了解"这些文件,即使在您将它们添加到.gitignore之后。

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

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

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


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

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

    1
    2
    3
    4
    git add [uncommitted changes you want to keep] && git commit
    git rm -r --cached .
    git add .
    git commit -m"fixed untracked files"
  • 如果从.gitignore文件中删除某些内容,但上述步骤不起作用,请尝试以下操作:

    1
    2
    3
    4
    5
    6
    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按预期工作:

1
git rm -r --cached debug.log nbproject

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


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

例子:

1
2
3
# Be aware of the following:
 notWorkingIgnore.*
workingIgnore.*

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

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


我注意到.gitignore的编码起了作用——如果文件是unicode,它就会被忽略;如果文件是ascii,它就不会。

过程:

  • 验证状态:PS> git status
  • 创建函数以获取文件编码
  • 测试.gitignore编码:PS> Get-FileEncoding .gitignore
  • 将编码改为ascii:PS> Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)
  • 确认:PS> git status

  • 与其他解决方案一样,请先提交,并注意您将丢失任何未提交的更改。

    我有更好的结果:

    1
    2
    3
    git rm -r --cached .
    git reset HEAD --hard
    git status

    请注意,状态现在不应该有任何修改过的文件。


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

    1
    2
    echo .idea/ >> .gitignore
    git init

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


    在我的例子中,这是因为文件已经存在于存储库中,我试图忽略它。

    以下是我为解决这个问题所做的:

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

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

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


    还可以查看放置.gitignore的目录。

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

    1
    ./myproject/.gitignore

    不在

    1
    ./myproject/.git/.gitignore


    .gitignore还有一个问题可能会发生,特别是对于Windows用户。Git不喜欢你叫.gitignore(比如unity.gitignore)。

    您需要始终将其命名为.gitignore,或者在Windows上命名为.gitignore.,因为Windows认为您试图在不使用文件名的情况下对其进行重命名。


    我刚刚碰到这个问题。.gitignore文件中的内容继续出现在未跟踪文件列表中。

    我用这个创建了忽略文件:

    1
    echo"node_modules"> .gitignore

    原来是双引号引起了这个问题。我删除了忽略文件,然后再次使用了不带引号的命令,它按预期工作。我不需要乱搞文件编码。我在使用Cmder的Windows 10计算机上。

    例子:

    1
    echo node_modules > .gitignore


    对我来说,以前的答案都不管用。我不得不将.gitignore文本复制到exclude.txt文件中,该文件位于

    1
    <Your-project-folder>\.git\info

    完成后,刷新您的更改,所有未跟踪的文件都将消失。照常承诺。


    我遇到了这个问题,一个包含此行的.gitignore文件:

    1
    lib/ext/

    我刚刚意识到,实际上,这个目录是指向其他文件夹的符号链接:

    1
    2
    ls -la lib/ext/
    lrwxr-xr-x 1 roipoussiere users 47 Feb  6 14:16 lib/ext -> /home/roipoussiere/real/path/to/the/lib

    lib/ext/行上,git实际上查找文件夹,但符号链接是文件,因此我的lib文件夹不会被忽略。

    我在.gitignore文件中将lib/ext/替换为lib/ext


    专门针对Windows用户:如果您有未跟踪的文件,并且清除/删除缓存文件不起作用。尝试打开PowerShell并将.gitignore文件转换为utf-8编码:

  • 江户十一〔11〕。

  • 埃多克斯1〔12〕

  • 您只需要这样做一次,就可以对该目录的.gitignore文件进行编码,并且由于该文件随后被正确编码,所以无论何时编辑该文件,它都会正常工作。我认为这是因为Github没有准备读取.gitignore文件的非UTF-8编码时出现了故障。据我所知,这个问题还没有为Windows解决。这不是什么大问题,只是在不工作的时候调试会很痛苦。


    我的问题是(正如op所建议的)一个损坏的.gitignore文件。我不相信这是真的,并且忽略了这种可能性,直到其他一切都失败了。损坏没有出现在vi中,但文件开头有两个字节导致忽略.gitignore文件。对我来说,这些只有当我输入cat .gitignore时才会出现,显示:

    1
    2
    3
    4
    5
    ??# Built application files
    *.apk
    *.ap_

    # ...

    我不知道这些是如何结束的,但是重新创建文件解决了这个问题。对损坏文件的十六进制分析显示:

    1
    2
    3
    user@dev ~/project/myproject $ xxd -b .gitignore
    00000000: 11111111 11111110 00100011 00000000 00100000 00000000  ..#. .
    00000006: 01000010 00000000 01110101 00000000 01101001 00000000  B.u.i.


    我也有同样的问题。我认为问题是CR与CR+LF的差异。我使用cmd(在Windows 7上)和以下命令将内容存储在.gitignore中:

    坏的:

    1
    2
    echo"file_to_be_ignored.py">> .gitignore
    echo"*~">> .gitignore

    等。

    问题是这个命令没有为Git放置正确的行尾标记来识别换行符(当Git需要另一行时是CR或CR+LF)。我通过手动更换VIM中的每一条新线来解决这个问题(VIM到救援!)而且效果很好。

    尝试在notepad++或vim中编辑.gitignore(理想情况下)。即使文件的格式正确,也要尝试替换换行符。听起来很奇怪,我知道,但这对我很管用。D


    好吧,所以在我的例子中,接受的解决方案不起作用,这里描述了所起的作用:

    Visual Studio 2013是否忽略.gitignore文件?

    简而言之:

    • 关闭Visual Studio。
    • 导航到.git文件夹
    • 删除ms-persist.xml
    • 重新启动Visual Studio

    还有一件事需要注意:您是否保存了带有正确行尾的.gitignore文件?

    窗户:

    如果在Windows上使用,是否用Windows行尾保存?并非所有的程序都会在默认情况下这样做;记事本++和许多PHP编辑器默认为Linux行尾,因此这些文件将与服务器兼容。检查这个的一个简单方法是在Windows记事本中打开文件。如果所有内容都出现在一行上,那么文件是用Linux行结尾保存的。

    Linux:

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


    只需通过以下命令删除以前在Git中提交的文件夹或文件。然后,gitignore文件将反映正确的文件。

    1
        git rm -r -f"folder or files insides"


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

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

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

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

    也可以使用sudo命令编辑.gitignore文件。我遇到了同样的问题,在执行命令:git status时,我仍然可以看到"应该被忽略"的文件。

    nano .gitignore而不是sudo nano .gitignore编辑后,我可以看到正确的反映。


    我已经在Windows的PowerShell中创建了.gitignore,因为它不允许我在Windows资源管理器中创建它。

    在我的例子中,问题是所创建文件的编码,在我将其更改为ANSI之后,问题就解决了。


    另一个可能的原因是,Git客户机的一些实例同时运行。例如,"git shell"+"github桌面"等。

    这件事发生在我身上。我使用"Github桌面"作为主客户端,它忽略了一些新的.GitIgnore设置:提交后提交:

  • 你承诺了什么。
  • 下一步,提交:它忽略.gitignore设置。commit包含了很多在.gitignore中提到的临时文件。
  • 清除git缓存;检查.gitignore是否为utf-8;删除文件&rarr;提交&rarr;向后移动文件;跳过一次提交-没有任何帮助。
  • 原因:Visual Studio代码编辑器在后台运行,具有相同的已打开存储库。Visual Studio代码具有内置的Git控件,这会导致一些冲突。

    解决方案:仔细检查多个隐藏的Git客户机,一次只使用一个Git客户机,尤其是在清除Git缓存时。


    如果您是记事本+用户,请尝试执行以下操作:

    使用记事本++打开.gitignore文件并执行以下操作:

    菜单编辑&rarr;EOL转换&rarr;Windows格式&rarr;保存。

    再次尝试使用git status,看看它是否适合您。

    我在这里发布了一个类似问题的答案。


    对我来说,这是另一个问题。我的.gitignore文件设置为忽略除我告诉它不要忽略的内容之外的所有内容。就像这样:

    1
    2
    /*
    !/content/

    这显然意味着我也要告诉Git忽略.git ignore文件本身。只要我不跟踪.gitignore文件就没问题。但在某个时候,我提交了.gitignore文件本身。然后导致正确忽略.gitignore文件。

    所以再加一行就可以解决这个问题了:

    1
    2
    3
    /*
    !/content/
    !.gitignore