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

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


当前回答

已经有一些很好的答案了,但我的情况很乏味。我在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存储库的顶部文件夹运行以下命令:

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

我的没有工作,因为我确实创建了一个名为.gitignore的文本文档

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

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


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

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

我有更好的结果:

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

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

这里其他答案没有涉及的一个棘手问题是,如果您有内联注释,.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 public
foo/bar

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

我应该强调的是,与前面的许多回答不同,这些回答解决了先前提交的文件/目录无法被跟踪的问题,在我的情况下,我在第一次提交之前遇到了这个问题(即只运行git init,然后运行git status)。

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

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

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

在尝试了创建.gitignore.txt文件的不同方法之后,我设法弄清楚了如何使其工作,尽管我不能说我明白为什么。如果有人能提供解释,那将是很有意思的。

为了让那些可能发现前面的答案没有解决他们的问题的人受益,我将描述我尝试了什么,什么没有奏效,什么做了。希望通过这样做,它也可以揭示原因。请注意,我使用的是Windows 10。

尝试#1(失败)

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

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

我运行git状态,但我想要忽略的文件/文件夹显示为未跟踪。我在Windows资源管理器中检查了文件财产。不出所料,文件名为“.gitignore”,文件类型为“文本文档(.txt)”。

注1:

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

尝试#2(失败)

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

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

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

尝试#3(成功)

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

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

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

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

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

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