. gitignore被Git忽略

我的.gitignore文件似乎被Git忽略了-.gitignore文件会损坏吗?Git期望哪种文件格式、语言环境或文化?

我的.gitignore

# This is a commentdebug.lognbproject/

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

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

943005 次浏览

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

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

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

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

修复了。好的,我在Windows上的记事本中创建了. gitignore文件,但它不起作用。当我在Linux上查看. gitignore文件时,它看起来像是有组织的乱码——也许记事本已经写出了Unicode而不是ASCII或任何8位代码。

所以我重写了Linux上的文件,当我把它拉回Windows时,它运行得很好!万岁!

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

windows:

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

Linux:

如果您在Linux环境中无法使用该文件,请在Emacs或纳米等编辑器中打开该文件。如果您看到任何不可打印的字符,则该文件已使用Windows行结尾保存。

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

示例:

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

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

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

无需向您的项目添加另一个提交,一行就足以使.gitignore按预期工作:

git rm -r --cached debug.log nbproject

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

还可以查看您放置.gitignore目录

它应该在你项目的根源中:

./myproject/.gitignore

不在里面

./myproject/.git/.gitignore

我遇到了同样的问题。我相信这个问题是CR与CR+LF差异。我使用CMD(在Windows 7上)和以下命令将东西藏在我的. gitignore中:

不好:

echo "file_to_be_ignored.py" >> .gitignore<br>echo "*~" >> .gitignore

等等。

问题是这个命令没有为Git放置正确的行尾标记来识别换行符(当Git期望另一个换行符时,CR或CR+LF)。我通过手动替换Vim中的每个换行符来解决这个问题(Vim救援!),它工作得很好。

尝试在Notepad++或Vim中编辑您的. gitignore(理想情况下)。即使文件看起来格式正确,请尝试替换换行符。我知道这听起来很奇怪,但它对我有用。: D

我注意到.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

.gitignore还有另一个可能发生的问题,特别是对于Windows用户。Git不喜欢您命名.gitignore(例如unity.gitignore)。

您将希望始终将其命名为.gitignore,或者在Windows上命名为.gitignore.,因为Windows认为您正在尝试在没有文件名的情况下重命名它。

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

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

    git add [uncommitted changes you want to keep] && git commitgit rm -r --cached .git add .git commit -m "fixed untracked files"
  • If you remove something from a .gitignore file, and the above steps maybe don't work,if you found the above steps are not working, try this:

    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

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

echo .idea/ >> .gitignoregit init

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

好的,所以在我的情况下,接受的解决方案不起作用,这里描述了有效的方法:

Visual Studio 2013忽略你的. gitignore文件吗?

简而言之:

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

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

我有更好的结果:

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

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

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

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

完成后,刷新您的更改,所有未跟踪的文件都消失了。像往常一样提交。

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

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

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

lib/ext/

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

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来修复此问题。

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

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

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

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

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

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

我使用它来创建忽略文件:

echo "node_modules" > .gitignore

事实证明是双引号引起了我的问题。我删除了忽略文件,然后再次使用该命令,没有引号,它按预期工作。我不需要弄乱文件编码。我在一台使用Cmder的Windows 10机器上。

示例:

echo node_modules > .gitignore

这里的其他答案没有涵盖的一件棘手的事情是,如果您有内联注释,. 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 publicfoo/bar

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

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

你只需要执行此操作一次即可为该目录的. gitignore文件编码,并且由于该文件随后被正确编码,因此将来无论何时编辑该文件,它都应该可以工作。我相信这是由于GitHub的故障无法读取. gitignore文件的非UTF-8编码。据我所知,这个问题尚未在Windows上得到解决。这不是什么大问题,只是在不工作时调试起来很痛苦。

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

��# Built application files*.apk*.ap_
# ...

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

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

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

使用Notepad++打开您的. gitignore文件并执行以下操作:

菜单编辑停产转正windows格式保存

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

我已经发布了类似问题的答案这里

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

/*!/content/

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

所以再添加一行固定它:

/*!/content/!.gitignore

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

在使用nano .gitignore而不是sudo nano .gitignore进行编辑时,我可以看到正确的反射。

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

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

另一个可能的原因-几个Git客户端实例同时运行。例如“git shell”+“GitHub Desktop”等。


这发生在我身上。我使用“GitHub Desktop”作为主要客户端,它忽略了一些新的. gitignore设置:提交后提交:

  1. 你犯了什么事。
  2. 接下来,提交:它忽略. gitignore设置。Commit包括. gitignore中提到的许多临时文件。
  3. 清除Git缓存;检查. gitignore是否为UTF-8;删除文件→提交→将文件移回;跳过一次提交-没有帮助。

原因:Visual Studio Code编辑器在后台运行,具有相同的打开的存储库。Visual Studio Code具有内置的Git控件,这会导致一些冲突。

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

我在Ubuntu上也有同样的问题,我从终端创建了.gitignore,它适合我

touch .gitignore

我的不起作用,因为我已经创建了一个名为. gitignore的文本文档

相反,创建一个文本文档,在Notepad++中打开它,然后另存为. gitignore

保存时,请确保从下拉列表中选择所有类型 (*.*) 。


或者在gitbash中,只需使用touch .gitignore

我的问题是我写下了用引号忽略的文件“分离不是斜杠 /.

这不起作用,被git忽略:

"db.sqlite3""tdd_venv/"

这工作得很好:

/db.sqlite3/tdd_venv/

我还使用Notepad++在Windows中检查了我的文件编码。编码设置为UTF-8。

这听起来可能很愚蠢,但解决我问题的是意识到.gitignore正常工作,即使它在git状态上说deleted: yourfile

我打算忽略一个错误日志文件,忽略我引起的任何错误,但保存其他开发人员引起的错误,以防有一天在调试一个奇怪的问题时派上用场。然而,git不允许你“忽略”并同时保留一个文件。

我希望它被“及时冻结”,但git说它要么被跟踪,要么根本不允许它在那里。

已经有了一些很好的答案,但我的情况很乏味。我在Win10上编辑了安装的PLM(产品生命周期管理)软件的源代码,然后决定,“我可能应该把它变成一个git存储库。”

所以,缓存选项对我来说不起作用,直接。为其他人发布可能在做了一堆初始工作后添加了源代码控制,并且.gitignore不起作用,但是,你可能害怕失去一堆工作,所以git rm --cached不适合你。

!重要:这真的是因为我向一个太大的“项目”添加git太晚了,似乎忽略了我的. gitignore。我从来没有提交过。我可以放弃这个:)

首先,我只是做了:

rm -rf .gitrm -rf .gitignore

然后,我必须有一张我所做更改的图片。同样,这是一个我已经做过更改的安装产品。对于纯master分支的第一次提交来说已经太晚了。所以,我需要一个列表,列出自从我通过将 > changed.log添加到以下任何一个来安装程序以来我所做的更改:

PowerShell

# Get files modified since date.Get-ChildItem -Path path\to\installed\software\ -Recurse -File | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-02-25')} | Select-Object FullName

Bash

# Get files modified in the last 10 days...find ./ -type f -mtime -10

现在,我列出了我在过去十天里改变的事情(让我们不要在这里进入最佳实践,除了说,是的,我对自己做了这件事)。

一个新的开始,现在:

git init .# Create and edit .gitignore

我不得不将我更改的列表与我不断增长的. gitignore进行比较,在我改进它时运行git status,但我在. gitignore中的编辑在我进行时是读入的。

最后,我列出了想要的更改!在我的情况下,它是样板文件——一些主题工作以及特定于针对这个软件运行开发系统的服务器xml配置,我想把它放在一个存储库中,供其他开发人员获取和贡献……这将是我们的主分支,所以承诺,推动,最后是新工作的分支!

PhpStorm(可能还有其他一些IDE用户),在我的情况下,问题是我通过查找器在项目之外创建和添加文件。

我删除了那个,并重新创建了相同的一个,但在PhpStorm项目中,右键单击->新建->文件,它立即工作。

我的30美分把戏:

  1. 请清理您的目录。git clean -f(我尝试了git rm -r --cached .,但它不适合我。)

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

也许您可以尝试git clean -xdf删除忽略的目录和未跟踪的文件

  1. 现在将HEAD带到当前位置git reset HEAD --hard.
  2. 检查git status

  3. 现在创建.gitignore,在我的情况下,它想忽略一个名为data的文件夹。所以我写了/data/(最初的/用于文件/文件夹,后来的/仅用于文件夹)。

  4. 现在做git添加、提交和推送。

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

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

我看到你们中的一些人已经回答了这个问题,但我不知道是否说清楚了。在我的情况下,问题是使用回显逗号创建. gitignore文件。在这种情况下,文件编码被更改,我必须打开文本文件,单击另存为并将底部选项卡中的编码更改为UTF-8。当使用touch命令创建文件并通过文本编辑器编辑其内容时,. gitignore没有出现问题。

这里有很多答案,但对我有用的并不完全在任何特定的答案中,我一个接一个地记录了所有需要在这里以简单的方式完成的步骤:

Pre----备份repo以防万一。(我没有,但可能会让你感觉更安全)

  1. 确保这是您的第一次提交还是更早地添加这些文件并因此被缓存。
  2. 如果是,则git rm-r--cache.和git add.(不要错过点)
  3. 如果它仍然不起作用,在记事本中打开文件
  4. 转到文件->另存为
  5. 将编码更改为ANSI。(有些答案错误地说UTF-8,但它不起作用,不必要地浪费时间)
  6. 再次git rm-r--cache.和git add.(不要错过点)
  7. 现在执行Git状态并验证我们想要的已经发生

尽管尝试了这篇文章和其他文章中的各种建议(例如Gitignore不工作Gatignore不工作-被忽视?),但我无法让git忽略我的.gitignore.txt文件中包含的文件/文件夹。

我应该强调的是,与之前的许多解决问题的答案不同,即先前已经提交的文件/目录将被取消跟踪,在我的情况下,我遇到了这个问题事先来进行我的第一次提交(即只运行git init,然后是git status)。

还有一些其他有希望的建议,包括:

  • 文本文件编码必须是ANSI而不是UTF,例如在Notepad++中编码->ANSI
  • Windows的EOL转换,例如在Notepad++中编辑->EOL转换->Windows
  • .gitignore.txt中的项没有前导或尾随空格
  • 定义文件夹时没有前导“/”

但没有一个适用或解决了我的问题。

在尝试了创建.gitignore.txt文件的不同方法后,我设法找出了如何来使其工作,尽管我不能说我理解为什么。知道是否有人能提供解释会很有趣。

对于那些可能也发现以前的答案没有解决他们的问题的人来说,我将描述我尝试了什么,什么不起作用以及做了什么。希望通过这样做,它也可以揭示为什么。请注意,我使用的是Windows 10。

尝试#1(失败)

在Windows资源管理器中创建新的txt文件:

  1. (在项目文件夹中)右键单击->新建->文本文档
  2. 将文件名更改为“. gitignore”
  3. 在Notepad++中打开文件,输入要忽略的文件/目录名称
  4. 编码->ANSI[注1],保存更改

我运行了git status,但我希望忽略的文件/文件夹显示为未跟踪。我检查了Windows资源管理器中的文件属性。不出所料,文件名为“. gitignore”,文件类型为“文本文档(. txt)”。

附注1

一些贡献者指出编码必须是ANSI(而不是UTF)。在Notepad++中,我发现无论我是进行编码->ANSI,还是编码->转换为ANSI+保存,关闭文件,然后重新打开它(在Notepad++中),当我检查编码时,它总是报告UTF-8。最终工作的.gitignore.txt文件也是如此。

尝试#2(失败)

在Notepad++中创建新的txt文件:

  1. 在Notepad++中创建新文件,输入要忽略的项目
  2. 保存为“.gitignore.txt”,将“另存为类型”从“普通文本文件”(默认)更改为“所有类型”,并取消勾选“附加扩展名”框(默认勾选)。

我运行了git status,和以前一样,所有文件/目录都列在未跟踪的文件下。和以前一样,文件名是“. gitignore”,文件类型是“文本文档(. txt)”。

尝试#3(成功)

在Notepad++中仍然打开相同的文件(.gitignore.txt):

  1. 保存为“. gitignore”为“另存为类型”选择“普通文本文件”,这会自动勾选框“附加扩展名”

我注意到在Windows资源管理器中创建的文件似乎没有名称。我检查了文件的属性:文件名字段为空,文件类型为“文本文档(. g忽略)”。在Windows资源管理器(查看->文件扩展名)中勾选“文件扩展名”后,“无名称”文件显示“. gitignore”扩展名。

我运行了git status,这次我想要忽略的文件/文件夹没有列为未跟踪的文件-成功!

在Notepad++中打开文件,我注意到编码是UTF-8,文件名被标识为“. gitignore”(与Windows资源管理器不同)。

因此,创建txt文件的方式似乎很微妙。也许这是Windows独有的特性?