Gitignore不起作用


274

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

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

它在目录中master,这是我的git repo。我正在运行Git 1.8.4.2,因为我在运行OSX 10.8.6的MacBook上。


4
1.哪些文件不应该建立索引?2.将这些文件添加到仓库后,是否添加了.gitignore?
艾哈迈德(Ahmad)

2
@Ahmad在执行多个项目时,该/bin/文件夹仍显示git status。自从我在.gitignore
2014年

1
“因为我添加了.gitignore”-那么您在添加文件后添加了.gitignore吗?
艾哈迈德(Ahmad)2014年


Answers:


683

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

在执行此操作之前,请记住将所做的所有更改都提交。

git rm -rf --cached .
git add .

这会从存储库中删除所有文件,然后将它们重新添加(这次遵循您中的规则.gitignore)。


2
或者您可以尝试使用git checkout folder_to_ignore / *恢复添加到.gitignore的文件/文件夹
Zahra

1
@Greenish,但是如果已经提交,则不起作用,仅当已登台时才起作用,如果文件夹已经在.gitignore中,则不应发生(除非您强制添加):)
Ahmad

1
当我将更改推送到github时对我不起作用。说一切都是最新的!
尤尼斯·亨尼(Younes Henni)医生

1
抱歉,Ahmed我通过删除gitignore文件并再次拉入并推送到远程仓库来解决我的问题。我不再记得输入git status时的内容。我的问题已解决。非常感谢。
尤尼斯·亨尼(Younes Henni)医生

3
我认为最好在git上添加'git ignore'命令来简化此操作。因此,我们可以git ignore path/file随时使用。
Tiw

123

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

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

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

git rm -r --cached .

这将从索引(临时区域)中删除所有更改的文件,然后运行:

git add .

提交:

git commit -m ".gitignore is now working"

确保将分支合并回master或移动指针,因为尝试此操作时,我失去了两个功能分支。幸运的是,我没有丢失任何工作,我从工作分支获得的所有最新更新都重置为master分支,但是根据您的设置,这种行为可能是不希望的。
雪橇

您将如何使用此命令从缓存中删除文件夹而不是文件?
RealMJDev

15

在钻了一些兔子洞试图遵循这个问题的答案之后(也许因为我必须在Visual Studio项目中这样做),我发现更简单的方法是

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

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

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

  4. 将文件移回到文件夹中。

我发现这是解决问题的最直接的方法(至少在视觉工作室中,或者我假设其他基于IDE的环境(如Android Studio)),而不会无意间无处不在地将自己开枪射击git rm -rf --cached .,之后我正在处理的Visual Studio项目未加载。


2
我非常喜欢这种方法-似乎破坏性较小,即使它不被认为是“适当的”。
theyetiman

6

在我的情况下,文件开头空白,当我在记事本中打开文件时清楚地显示了该空格,而在Visual Studio Code中却不明显。


4

我用一些东西.gitignore为我创造了共同点,我碰到了这一点。阅读@Ozesh答案后,我在VS Code中打开了它,因为它在右下角有一个漂亮的指示器,用于显示行尾的类型。它是LF,所以我按照建议转换为CRLF,但没有骰子。

然后我查看了行尾,发现它已使用UTF16保存。因此,我使用UTF8对voila编码进行了修复,它奏效了。我认为CRLF并不重要,因此可以肯定的是,我将其改回LF,并且仍然有效。

当然,这不是OP的问题,因为他已经提交了文件,因此已经对它们进行了索引,但是我想我分享一下,以防其他人偶然发现。

TLDR ; 如果尚未提交文件,并且仍然不尊重.gitignore,请检查文件编码,并确保其UTF8正确,如果不起作用,请尝试将行尾弄乱。


1
UTF16是我的罪魁祸首。打开VS代码>打开.gitignore>打开命令提示符>“更改文件编码”>“ UTF-8”>保存文件
Michael

3

在我的情况下,.gitignore行末尾的空格是原因。因此,请注意.gitignore中的空格!


1

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

首先,我是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默认记事本打开相同的文件时,所有内容均应正确格式化。试试看,看看是否适合您。


1

此外,评论必须独立行。它们不能在输入后放入。所以这行不通:

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

但这将起作用:

# fine to comment here
/node_modules

0

难道git reset --hard工作的人?我并不是说这是一个很好的解决方案,它似乎在我第一次尝试时就可以使用。


请忽略上面我的评论。工作中的某个人在Git中做错了什么,它导致了重复的文件夹,而且我很长一段时间都不知道了。谢谢。
user1889992 '12

0

我在编辑dockerignore时犯了一个大错误,在找到正确的忽略文件后工作得很好:p


0

补充一点,因为这是一个受欢迎的问题。

我无法将.history目录放在.gitignore内,因为无论我尝试了哪种组合,它都无法正常工作。Windows每次保存时都会不断生成新文件,我根本不想看到这些文件。

在此处输入图片说明

但是后来我意识到,这只是我在计算机上的个人开发环境。诸如.history或.vscode之类的东西对我来说是特定的,因此如果每个人都基于他们使用的IDE或OS包含了自己的.gitignore条目,那将很奇怪。

所以这对我有用只需将“ .history”附加到.git / info / exclude

echo ".history" >> .git/info/exclude
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.