Gitignore不工作

我的.gitignore文件由于某种原因无法正常工作,并且没有多少谷歌搜索能够修复它。这是我所拥有的:

*.apk*.ap_*.dex*.class**/bin/**/gen/.gradle/build/local.properties**/proguard/*.log

它位于目录master中,这是我的git存储库。我正在运行Git1.8.4.2,因为我在运行OSX 10.8.6的MacBook上。

653451 次浏览

您的版本控制中的文件/文件夹不会仅仅因为您将它们添加到.gitignore就删除它们自己。它们已经在存储库中,您必须删除它们。您可以这样做:

记住在你做这件事之前提交你已经更改的所有内容!

git rm -rf --cached .git add .

这将从存储库中删除所有文件并将它们添加回来(这次遵守.gitignore中的规则)。

要取消跟踪已经添加/初始化到存储库的单个文件,即停止跟踪文件但不从系统中删除它,请使用:git rm --cached filename

要取消跟踪现在在.gitignore中的每个文件:

首先提交任何未完成的代码更改,然后运行以下命令:

git rm -r --cached .

这会从索引(暂存区域)中删除任何更改的文件,然后只需运行:

git add .

承诺:

git commit -m ".gitignore is now working"

在经历了一点兔子洞之后,试图遵循这个问题的答案(也许是因为我必须在视觉工作室项目中这样做),我发现更容易的方法是

  1. 剪切并粘贴我不再想跟踪到临时位置的文件

  2. 提交这些文件的“删除”

  3. 提交对.gitignore的修改以排除我暂时移动的文件

  4. 将文件移回文件夹。

我发现这是最直接的方法(至少在视觉工作室中,或者我会假设其他基于IDE的环境,如Android Studio),而不会意外地用一个非常普遍的git rm -rf --cached .射击自己的脚,之后我正在工作的视觉工作室项目没有加载。

在我的例子中,. gitignore行末尾的空白是原因。所以要注意. gitignore中的空白!

git reset --hard对任何人都有效吗?我并不是说这是一个好的解决方案,只是我第一次尝试时似乎有效。

在我的情况下,当我在记事本中打开文件时,它是文件开头的空白,这在Visual Studio Code中并不明显。

我通过以下方式解决了我的问题:

首先,我是一个Windows用户,但我也遇到过类似的问题。所以,我在这里发布我的解决方案。

有时. gitignore不能像预期的那样工作,原因很简单。这是由于EOL转换行为。

这里有一个快速解决方案

编辑>EOL转换>Windows格式>保存

你可以归咎于您的文本编辑器设置

例如:

由于我是Windows开发人员,我通常使用记事本++来编辑我的文本,而不是Vim用户。

所以发生的事情是,当我使用Notepad++打开我的. gitignore文件时,它看起来像这样:

## Ignore Visual Studio temporary files, build results, and## files generated by popular Visual Studio add-ons.#### Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# See https://help.github.com/ignore-files/ for more about ignoring files.
# User-specific files*.suo*.user*.userosscache*.sln.docstates*.dll*.force# User-specific files (MonoDevelop/Xamarin Studio)*.userprefs

如果我使用默认记事本打开相同的文件,这就是我得到的

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache

所以,通过查看输出,你可能已经猜到了。. gitignore中的所有内容都变成了一行,并且由于开头有一个##,它就像所有内容都被注释了一样。

解决这个问题的方法很简单:只需使用Notepad++打开您的. gitignore文件,然后执行以下操作

编辑>EOL转换>Windows格式>保存

下次使用windows默认记事本打开相同文件时,所有内容都应该正确格式化。尝试一下,看看这是否适合您。

我用一些东西为我生成常见的.gitignore,我遇到了这个。阅读@Ozesh答案后,我在VS Code中打开,因为它在右下角有一个很好的指示器显示行尾类型。它是LF,所以我按照建议转换为CRLF,但没有骰子。

然后我看了看行尾旁边,注意到它是使用UTF16保存的。所以我使用UTF8编码重新保存了一个瞧,它起作用了。我认为CRLF无关紧要,所以我把它改回了LF以确保它仍然有效。

当然,这不是OPs的问题,因为他已经提交了文件,所以它们已经被索引了,但我想我会分享,以防其他人偶然发现这一点。

TLDR;如果您还没有提交文件并且. gitignore仍然没有得到尊重,那么请检查文件编码并确保其UTF8,如果这不起作用,那么可以尝试混淆行结尾。

另外,注释必须在它们自己的行上。它们不能放在条目之后。所以这行不通:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

但这将工作:

# fine to comment here/node_modules

加上我的一点,因为这是一个受欢迎的问题。

我无法将.历史目录放在. gitignore中,因为无论我尝试什么组合,它都不起作用。Windows在每次保存时都会生成新文件,我根本不想看到这些。

输入图片描述

但后来我意识到,这只是我机器上的个人开发环境。像.历史或. vscode这样的东西对我来说是特定的,所以如果每个人都根据他们使用的IDE或操作系统包含自己的. gitignore条目,那就太奇怪了。

所以这对我很有效,只需将“.历史”附加到. git/info/排除

echo ".history" >> .git/info/exclude

@Ahmad的答案正在工作,但如果您只是想忽略1个特定文件或几个文件,请按照@Nicolas的建议执行

第1步

将文件名添加到. gitignore文件

第2步

[从git缓存中删除文件名(文件路径)

git rm --cached filename

第3步

提交更改git add filename

git commit -m "add filename to .gitignore"

它会保持你的git历史记录干净,因为如果你做git rm -r --cached .并添加所有并提交它们,它会污染你的git历史记录(它会显示你在一次提交中添加了很多文件)不确定我是否正确表达了我的想法,但希望你明白这一点

我做了echo node_modules >> .gitignore,它不起作用。

由于某种原因,来自vscode的终端将文件保存在UCS-2 LE BOM中,而git似乎不接受这一点。

我打开并使用Notepad++将文件转换为UTF-8

改变记事本中的编码++

它现在起作用了。

我认为他们需要解决这个问题,因为echo "filetoignore" >> .gitignore实际上似乎是一件方便的事情

在我的情况下

我使用git-bash并写了这个命令:

echo [Enter_your_file_name.extension] >> .gitignore

然后在repo中执行推送,它工作正常

我的问题是我最初在Mac上创建了. gitignore,但现在在Windows机器上工作。在Mac上,您可以在文件路径中使用“/”。在Windows上,您使用“\”。

因此,为了让我的. gitignore文件正常工作,我必须使用一致的符号。在这种情况下,我必须为我想添加的每个文件路径使用“/”,即使复制时它是这样的:“file\path”。

在这个愚蠢的事情上浪费了好几个小时(它真的让我很困扰,哈哈)。

关于stackoverflow有很多答案,但对我有用的并不是完全在任何特定的一个,我一个接一个地记下所有需要在这里以简单的方式完成的步骤:

预——备份存储库以防万一。(我没有,但可能会让你感觉更安全)

  1. 确保这是您第一次提交还是更早提交这些文件被添加,因此已被缓存。
  2. 如果是,则git rm-r--缓存。和git添加。(不要错过点)
  3. 如果它仍然不起作用,在记事本中打开文件

转到文件->另存为将编码更改为ANSI。(有些答案错误地说UTF-8,但它不工作,不必要地浪费时间)

Again git rm -r --cached .and git add . (do not miss the dot)
Now do Git status and verifywhat we wanted has happened

在cmd窗口中使用下面的git命令,

git rm --cached filename

解释:

git-rm-从工作树和索引中删除文件

--cached使用此选项仅从索引中取消暂存和删除路径。工作树文件,无论是否修改,都将被单独留下。

--fromhttps://git-scm.com/docs/git-rm

有人可能会发现这很有用。对我来说,问题是格式。出于某种原因,在没有进行任何更改的情况下,git不喜欢文件内容的格式。.gitignore中的目录是这样的:

directory1/*directory2/*directory3/*

当我将格式更改为

directory1/directory2/directory3/

目录再次被忽略,我唯一需要添加/提交/推送的是.gitignore

我知道这已经有很多答案了,但是我最终回答这个问题的方式如下…

我在新存储库中的npm install之前做了'node_modules' > .gitignore,直到我更改了. gitignore(添加“**/node_modules”、“/node_modules”等),然后去了git status,我意识到它是二进制格式,而不是文本格式,因此git无法识别它。

我通过删除. gitignore文件并在我的编辑器中重新添加它来解决我的问题。

我的错误是混淆了. ginignore和.主意/. gitignore我正在使用. Ide/. gitignore做所有事情,并且不会将任何更改应用于git存储库。希望这能帮助那些和我犯同样错误的人。

这3个命令将解决问题,您的.gitignore将工作:

git rm -r --cached .git add .git commit -m 'Remove ignored files'

现在检查状态:

git status

我是初学者,我昨晚遇到了同样的问题(在Windows上)。
我发现你的. gitignore文件不能有. txt扩展名。

这就是我解决它的方法。

  1. 打开任何目录并转到菜单栏,单击查看,然后选中“文件扩展名”
  2. 之后,您通过删除. txt扩展来编辑. gitignore文件的名称。
  3. 因此,您将拥有一个没有. txt extesion的文本文件. gitignore。