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

我的.gitignore:

# This is a comment
debug.log
nbproject/

git状态的输出:

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

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


当前回答

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

所以我在我的Linux盒子上重写了这个文件,当我把它拉回到Windows时,它工作得很好!万岁!

其他回答

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

因此,缓存选项直接对我不起作用。发布给那些在做了大量初始工作后添加了源代码控制的人,gitignore不起作用,但是,你可能会害怕失去大量工作,所以git-rm-cached不适合你。

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

首先,我刚刚做到了:

rm -rf .git
rm -rf .gitignore

然后,我必须拍下我的变化。同样,这是一个我已经做过修改的安装产品。对于纯主分支的第一次提交来说太晚了。因此,我需要一个列表,列出我在安装程序后所做的更改,方法是将>changed.log添加到以下任一项:

PowerShell(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状态,但我在.gitignore中所做的编辑会随着我的前进而被读取。

最后,我有了所需更改的列表!在我的例子中,它是样板——一些主题工作以及服务器xml配置,这些配置专门用于针对这个软件运行开发系统,我想将其放入一个repo中,供其他开发人员抓取和贡献……这将是我们的主分支,因此提交、推送,最后分支新工作!

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

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

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

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

# ...

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

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

我注意到.gitignore的编码产生了影响——如果文件是Unicode,它会被忽略,如果是ASCII,它不会被忽略。

流程:

验证状态:PS>git状态创建一个函数以获取文件编码Test.gitignore的编码:PS>Get-FileEncoding.gitignor将编码更改为ASCII:PS>Set-Content.gitignore-encoding ASCII-Value(Get-Content.gitignore)确认:PS>git状态

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

可能有一个全局.gitignore文件会干扰您的本地文件当您向.gitignore文件中添加内容时,请尝试以下操作:git add[要保留的未提交更改]和git commitgit rm-r--缓存。git添加。gitcommit-m“修复了未跟踪的文件”如果您从.gitignore文件中删除了一些内容,并且上面的步骤可能不起作用,如果您发现上面的步骤不起作用的话,请尝试以下操作:gitadd-f[要再次跟踪的文件]gitcommit-m“刷新从.gitignore文件中删除文件。”//例如,如果希望再次跟踪.java类型文件,//命令应为://git-add-f*.java