题 .gitignore不工作


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

我应该从哪里开始寻找解决方法呢?


1075
2017-07-12 12:09


起源


确保你的 .gitignore 文件使用 ANSI 要么 UTF-8 编码。如果它使用其他类似的东西 Unicode BOM,Git可能无法读取文件。 - ADTC
可能重复 如何让Git“忘记”一个被跟踪但现在位于.gitignore的文件? - Lore
@ADTC这正是我机器上的问题(Windows)。我用过 echo "file" > .gitignore 在PowerShell中,该文件具有UCS-2编码! - MarioDS
git rm --cached debug.log nbproject/ - reversiblean
为什么这里的第一条评论不是答案,超出了我的范围 - RedOrav


答案:


即使你到目前为止还没有跟踪文件,git似乎也能够“知道”它们,即使你将它们添加到 .gitignore

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

然后从您的git仓库的顶级文件夹运行以下命令:

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

2258
2017-07-12 12:20



当我尝试“git rm -r --cached”时,我得到了“用法:git rm [options] [ - ] <file> ...”。如果重要的话,我在GitHub for Windows中单击“工具 - >在这里打开一个shell”后,在PowerShell中使用Git。 - Soonts
在Windows上:git rm。 -r --cached 和  git add。 - Beachhouse
请注意 承诺 之前的所有更改,否则您将失去对所有已更改文件的控制权! - Cosmin
最初的3名评论者似乎最终错过了这一点。这意味着每个文件。 “git -rm -r --cached。” < - 注意点。 - Christophe De Troyer
如果您不想提交,则解决方法是将更改放在架子上:“git stash”。运行以上命令。并运行“git stash pop” - Ivan Voroshilin


当.gitignore文件不起作用(将某些内容添加到.gitignore文件或从.gitignore文件中删除某些内容)时,您可以查看以下提示:

  1. 你有时必须注意全局gitignore文件 可能会影响你的gitignore。
  2. 当您在.gitignore文件中添加内容时,作为回答的人 这个问题首先:

    git rm -r --cached .
    git add .
    git commit -m "fixed untracked files"  
    
  1. 从.gitignore文件中删除某些内容时。以上步骤将   不适合你。你可以试试这个:
    git add -f "filetype"
    git commit -m "Refresh removing filetype from .gitignore file."

“filetype”表示要从.gitignore文件中删除的文件或文件类型。您想要再次跟踪文件类型。


213
2017-09-03 13:54



也许你可以编辑@AlinHuruba的答案来添加你的第3步吗? - Benj
@Benj感谢您的建议,我没有找到AlinHuruba的答案,我不知道有什么区别,所以请直接告诉我。 - ifeegoo
滚动直到看到1800点答案 - Benj
第3步是我需要的。大多数答案只是告诉我们如何删除我们想要解决的文件。谢谢你的观点相反。 - Yeung
步骤(1)和(2)运作良好。很好的答案 - JnL


固定。好吧,我在Windows上的记事本中创建了.gitignore文件,但它无法正常工作。当我在linux中查看.gitignore文件时,它看起来像是有组织的乱码 - 也许记事本已经写出了unicode而不是ascii或者任何8位。

所以我在我的linux盒子上重写了这个文件,当我把它拉回到windows时它工作正常!欢呼!


131
2017-07-12 12:30



在记事本中,只需在“另存为”对话框中选择编码“ANSI”。或者更好的是,得到一个合适的文本编辑器 - 毕竟你是一个程序员:) ...我可以推荐“程序员的记事本”,其他人更喜欢Notepad ++,而且还有数百个。 - 0xC0000022L
呵呵,是的,我应该用netbeans(我当时正在使用),eclipse或visual studio创建它。我只是从命令行调用它认为它不会有所作为。 - Matt Parkins
我们需要使用linux / unix之类的相对路径而不是windows路径(即使用“/”而不是“\”),即使您使用的是Windows操作系统并将其保存为ANSI,如前面的评论所述。 - Dhaval Desai
我的问题很相似 - 我的.gitignore正在使用UTF8 BOM。刚刚将它保存为UTF8而没有BOM,它神奇地开始工作。 - Phil
这也是我的问题。我用“echo dirName> .gitignore”创建了.gitignore文件,因为Windows使创建以“。”开头的文件变得如此痛苦。以这种方式创建的文件的编码是git无法读取的,它将其解释为二进制文件。在Notepad ++中单击“编码 - > UTF-8”,保存,完成。 - Laura


如果不向项目添加其他提交,则只需一行即可 .gitignore 工作,因为它应该:

git rm -r --cached debug.log nbproject

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


77
2018-03-19 23:40



完全按照我的意愿工作 - 我只有一个文件没有被正确跟踪。我把它的内容保存在记事本中,然后做了: git rm -r --cached someFile.php 它就像一个魅力:) - ShayLivyatan
你能解释一下这个命令的作用吗?谢谢。 - FMFF
@FMFF这将从存储库中删除它,但仍然保持它们的物理,用简单的英语,它删除任何与它们相关的更改历史记录,并且也不会在将来的任何提交中跟踪它们的更改。您可以在此处找到更好的解释: stackoverflow.com/questions/37279654/... - H Aßdøµ


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

例:

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

正如评论所指出的那样,尾随空间也是一个问题

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

31
2017-12-23 01:48



一个尾随空间是我的问题,甚至更难找到。 - amr
还有一个尾随空白问题。 - Trefex
是的,这里也一样。我以为我可以在文件模式后写评论: *.txt # Tex files。但是git理解:“忽略带有扩展名的文件 txt “ - Adam Libuša
我的话,花了我两天的时间来找到这个15个上升的答案。这值得更多。 - fordcars
你刚刚解决了我几个月来遇到的问题......谢谢! - Arkellys


我注意到了编码的 .gitignore 有效 - 如果文件是Unicode,它被忽略,如果它是ASCII,它不是。

处理:

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

27
2017-08-13 21:14



1000谢谢你。我正在使用。在我的系统上创建.gitignore文件 touch .gitignore 和 echo ".db" >> .gitignore 通过powershell路线。我发现了 echo ".db" >> .gitignore" 将文件编码设置为UCS-2 LE-BOM,快速转换为ASCII并且gitignore开始工作。 - impr0t
这对我也有帮助。谢谢。 - DG3
您可以尝试跳过第2步和第3步。 - Aniket Bhansali


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

我有更好的结果:

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

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


16
2017-11-14 23:13



这个不适合我,但ifeegoo的答案确实如此 - fanny


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

echo .idea/ >> .gitignore
git init

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


12
2017-11-25 21:21





还看看 目录,你把.gitignore放在哪里 它应该在 你的项目的根

./myproject/.gitignore

不在

./myproject/.git/.gitignore

11
2017-10-14 06:32





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

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

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

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

我认为你不能忽略repo上已经存在的文件。


10
2017-08-21 08:27