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用户:如果您有未跟踪的文件,并且无法清除/删除缓存的文件。尝试打开PowerShell并将.gitignore文件转换为UTF-8编码:

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

您只需要这样做一次,就可以对该目录的.gitignore文件进行编码,并且由于该文件随后被正确编码,因此无论您将来何时编辑该文件,它都会正常工作。我认为这是由于GitHub无法读取.gitignore文件的非UTF-8编码而出现的问题。据我所知,Windows尚未解决此问题。这没什么大不了的,只是当它不工作时调试起来很痛苦。

其他回答

我的问题是我写下了要忽略的文件,用引号“”分隔,而不是用斜线/分隔。

这不起作用,被git忽略了:

"db.sqlite3"
"tdd_venv/"

这很好:

/db.sqlite3
/tdd_venv/

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

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


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

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

原因:Visual Studio代码编辑器是在后台使用同一个打开的存储库运行的。Visual Studio Code内置了Git控件,这会导致一些冲突。

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

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

您希望始终将其命名为.gitignore,或者在Windows上命名为.git ignore,因为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"