.gitignore被Git忽略了

Mat*_*ins 1407 git gitignore

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

我的.gitignore:

# This is a comment
debug.log
nbproject/
Run Code Online (Sandbox Code Playgroud)

输出来自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)
Run Code Online (Sandbox Code Playgroud)

我想,debug.lognbproject/不是出现在未跟踪的文件列表中.

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

Ali*_*uba 2897

即使你到目前为止还没有跟踪过这些文件,Git似乎也能够"知道"它们,即使你将它们添加到了它们之后.gitignore.

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

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

git rm -r --cached .
git add .
git commit -m "fixed untracked files"
Run Code Online (Sandbox Code Playgroud)

  • 请注意以前**提交**所有更改,否则您将失去对所有已更改文件的控制权! (87认同)
  • 在Windows上:git rm.-r --cached __and__ git add. (58认同)
  • 前三名评论者似乎最终错过了这一点.这意味着每个文件."git -rm -r --cached." < - 注意点. (42认同)
  • 如果您不想提交,则解决方法是将更改放在架子上:"git stash".运行以上命令.并运行"git stash pop" (17认同)
  • 当我尝试"git rm -r --cached"时,我得到了"用法:git rm [options] [ - ] <file> ...".如果重要的话,我在GitHub for Windows中单击"工具 - >在这里打开一个shell"后,在PowerShell中使用Git. (8认同)
  • 至少在Windows上,这个命令会导致所有文件被提交(包括文件在.​​gitignore中的监听).所以在我的情况下它没有工作/错误. (5认同)
  • 建议的解决方案添加了我打算忽略的文件 - 与我想要的完全相反...... (4认同)
  • 它应该是:git rm -r --cached.和git添加.点很重要!它指定将此应用于当前目录下的所有文件(在顶级git目录中这样做).我会编辑这个,但没有足够的声誉.... :) (2认同)
  • 如果rm这个文件,当我将其推送到服务器时,该文件在服务器中会发生什么? (2认同)
  • 此解决方案不起作用!荒谬的是,这个问题多久出现一次,并且很难解决,即使一个经验丰富的git用户也是如此。 (2认同)
  • 现在已经是 2019 年了,这仍然是一个问题,在 ma mac 上重现。解决了这个问题,让我内心感到温暖。把我逗得恰到好处。 (2认同)

ife*_*goo 310

如果看起来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"
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果从.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
    
    Run Code Online (Sandbox Code Playgroud)

  • 滚动直至看到1800点答案 (7认同)
  • git rm -r --cached为我工作 (4认同)
  • 也许你可以编辑@AlinHuruba的答案来添加你的第3步吗? (3认同)
  • 第3步是我需要的.大多数答案只是告诉我们如何删除我们想要解决的文件.谢谢你的观点相反. (2认同)

Mat*_*ins 180

固定.好的,我在Windows上的记事本中创建了.gitignore文件,但它无法正常工作.当我在Linux上查看.gitignore文件时,它看起来像是有组织的乱码 - 也许Notepad写出了Unicode而不是ASCII或8位.

所以我在我的Linux机器上重写了这个文件,当我把它拉回到Windows时它运行正常!欢呼!

  • 在记事本中,只需在"另存为"对话框中选择编码"ANSI".或者更好的是,得到一个合适的文本编辑器 - 毕竟你是一个程序员:) ...我可以推荐"程序员的记事本",其他人更喜欢Notepad ++,而且还有数百个. (74认同)
  • 这也是我的问题.我用"echo dirName> .gitignore"创建了.gitignore文件,因为Windows使创建以"."开头的文件变得如此痛苦.以这种方式创建的文件的编码是git无法读取的,它将其解释为二进制文件.在Notepad ++中单击"编码 - > UTF-8",保存,完成. (12认同)
  • 我的问题很相似 - 我的.gitignore使用UTF8和[BOM](http://en.wikipedia.org/wiki/Byte_order_mark).刚刚将它保存为UTF8而没有BOM,它神奇地开始工作. (7认同)
  • 与powershell中的@Laura有同样的问题 - 该文件默认保存为UTF16. (3认同)
  • 呵呵,是的,我应该在 netbeans(我当时正在使用)、eclipse 或 Visual Studio 中创建它。我只是从命令行调用它,认为它不会有什么不同。 (2认同)

H A*_*døµ 105

在不向项目添加另一个提交的情况下,一行就足以完成.gitignore工作,因为它应该:

git rm -r --cached debug.log nbproject
Run Code Online (Sandbox Code Playgroud)

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


Raw*_*awa 41

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

例:

# Be aware of the following:
 notWorkingIgnore.*
workingIgnore.*
Run Code Online (Sandbox Code Playgroud)

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

# Be aware of the following:
notWorkingIgnore.* #<-Space
workingIgnore.*#<-Nospace
Run Code Online (Sandbox Code Playgroud)

  • 一个尾随空间是我的问题,甚至更难找到. (11认同)
  • 还有一个尾随空白问题. (3认同)
  • 是的,这里也一样.我以为我可以在文件模式之后写评论:`*.txt#Tex files`.但是git理解:"忽略扩展名为'txt`的文件" (3认同)
  • 我的话,花了我2​​天的时间才找到这个15个上升的答案.这值得更多. (2认同)
  • 你刚刚解决了我几个月来遇到的问题......谢谢! (2认同)

Ste*_*ark 32

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

我有更好的结果:

git rm -r --cached .
git reset HEAD --hard
git status
Run Code Online (Sandbox Code Playgroud)

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

  • 这个不适合我,但ifeegoo的答案确实如此 (2认同)

cra*_*aig 31

我注意到它的编码.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

  • 1000谢谢你.我使用`touch .gitignore`和`echo".db">> .gitignore`路由通过powershell在我的系统上创建.gitignore文件.我发现`echo >> .db">> .gitignore"`正在将文件编码设置为UCS-2 LE-BOM,快速转换为ASCII并且gitignore开始工作. (5认同)
  • 您可以尝试跳过第2步和第3步. (2认同)

Ede*_*esa 17

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

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

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

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

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


CES*_*SCO 16

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

echo .idea/ >> .gitignore
git init
Run Code Online (Sandbox Code Playgroud)

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


Art*_*sev 13

另请查看您放置的目录.gitignore.

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

./myproject/.gitignore
Run Code Online (Sandbox Code Playgroud)

不在

./myproject/.git/.gitignore
Run Code Online (Sandbox Code Playgroud)


小智 12

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

git update-index --skip-worktree <file_name>
Run Code Online (Sandbox Code Playgroud)


小智 7

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

你会想要总是命名它.gitignore,或者在Windows上,.gitignore.因为Windows认为你试图在没有文件名的情况下重命名它.


小智 7

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

1)$ Myfile = Get-Content ..gitignore

2)$ Myfile = | Out-File -Encoding"UTF8".gitignore

只需要执行一次编码该目录的.gitignore文件,并且因为无论何时编辑该文件,该文件都会正确编码,因此它应该可以正常工作.我相信这是因为GitHub不会为.gitignore文件读取非UTF-8编码.据我所知,Windows尚未解决此问题.没有太大的交易,只是在它不工作时调试很痛苦.


Nei*_*erg 7

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

因此,缓存选项不会直接对我起作用。为其他可能在完成大量初始工作后添加了源代码控制并且.gitignore不起作用的人发帖,但是,您可能害怕失去大量工作,所以git rm --cached不适合您。

!重要提示:这实际上是因为我太晚将 git 添加到一个太大的“项目”中,并且似乎忽略了我的 .gitignore。我从来没有做出任何承诺。我可以摆脱这个:)

首先,我刚刚做了:

rm -rf .git
rm -rf .gitignore
Run Code Online (Sandbox Code Playgroud)

然后,我必须有一张我的变化的照片。再次强调,这是一个我已对其进行更改的安装产品。对于纯 master 分支的第一次提交来说太晚了。因此,我需要一份自安装该程序以来所做更改的列表, > changed.log方法是添加以下内容:

电源外壳

# 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
Run Code Online (Sandbox Code Playgroud)

重击

# Get files modified in the last 10 days...
find ./ -type f -mtime -10
Run Code Online (Sandbox Code Playgroud)

现在,我列出了过去十天内我所做的更改(除了说,是的,我对自己做了这件事之外,我们不要在这里讨论最佳实践)。

为了一个新的开始,现在:

git init .
# Create and edit .gitignore
Run Code Online (Sandbox Code Playgroud)

我必须将更改后的列表与不断增长的 .gitignore 进行比较,并git status在改进时运行,但我在 .gitignore 中的编辑会随着我的运行而被读入。

最后,我列出了所需的更改!就我而言,它是样板文件 - 一些主题与特定于针对该软件运行开发系统的服务器 xml 配置一起工作,我想将其放入存储库中以供其他开发人员获取并做出贡献...这将是我们的主分支,所以承诺、推动,最后为新工作分支!


Bar*_*osz 6

好的,所以在我的例子中,接受的解决方案不起作用,有效的描述如下:

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

简而言之:

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


bpr*_*dev 6

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

我用它来创建忽略文件:

echo "node_modules" > .gitignore
Run Code Online (Sandbox Code Playgroud)

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

例:

echo node_modules > .gitignore
Run Code Online (Sandbox Code Playgroud)


小智 5

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

坏的:

echo "file_to_be_ignored.py" >> .gitignore<br>
echo "*~" >> .gitignore
Run Code Online (Sandbox Code Playgroud)

等等。

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

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


rag*_*aga 5

对我来说,以前的答案都没有奏效.我不得不将.gitignore文本复制到exclude.txt找到的文件中

<Your-project-folder>\.git\info
Run Code Online (Sandbox Code Playgroud)

完成后,刷新更改并删除所有未跟踪的文件.像往常一样.


roi*_*ere 5

我有这个问题,包含这一行的.gitignore:

lib/ext/
Run Code Online (Sandbox Code Playgroud)

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

ls -la lib/ext/
lrwxr-xr-x 1 roipoussiere users 47 Feb  6 14:16 lib/ext -> /home/roipoussiere/real/path/to/the/lib
Run Code Online (Sandbox Code Playgroud)

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

我通过更换固定这个liblib/ext/我的.gitignore.


pcd*_*dev 5

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

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

# ...
Run Code Online (Sandbox Code Playgroud)

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

user@dev ~/project/myproject $ xxd -b .gitignore
00000000: 11111111 11111110 00100011 00000000 00100000 00000000  ..#. .
00000006: 01000010 00000000 01110101 00000000 01101001 00000000  B.u.i.
Run Code Online (Sandbox Code Playgroud)

  • 这看起来像是 UTF-8 编码文件中的 UTF-16 字节顺序标记。https://en.wikipedia.org/wiki/Byte_order_mark (2认同)