吉蒂格尔没有工作

时间:2014-08-21 21:34:27

标签: git gitignore

由于某种原因,我的.gitignore文件无法正常工作,并且没有任何数量的Google搜索能够修复它。这就是我所拥有的:

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

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

18 个答案:

答案 0 :(得分:418)

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

请记住在执行此操作之前提交您已更改的所有内容。

git rm -rf --cached .
git add .

这将从存储库中删除所有文件并将其添加回来(这次是尊重.gitignore中的规则)。

答案 1 :(得分:84)

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

要取消现在.gitignore中的所有文件:

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

git rm -r --cached .

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

git add .

承诺:

git commit -m ".gitignore is now working"

答案 2 :(得分:7)

@Ahmad的答案有效,但是如果您只想git忽略1个特定文件,或者按@Nicolas的建议做几个文件

步骤1

将文件名添加到.gitignore文件

步骤2

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

git rm --cached filename

setp 3

提交更改 git add filename

git commit -m "add filename to .gitignore"

它将保持您的git历史记录整洁,因为如果您执行git rm -r --cached .并全部添加并提交它们,将污染您的git历史记录(它将表明您在一次提交中添加了很多文件)不确定我表达了我的想法,但希望您明白这一点

答案 3 :(得分:5)

在我的情况下,文件开头的空格在我在记事本中打开文件时显示清楚,在Visual Studio代码中并不明显。

答案 4 :(得分:4)

在尝试按照这个问题的答案(可能是因为我必须在视觉工作室项目中做到这一点)之后,我想找到更容易的路径

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

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

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

  4. 将文件移回文件夹。

  5. 我发现这是最直接的方式(至少在视觉工作室,或者我会假设其他基于IDE的环境,如Android Studio),而不会意外地在脚下射击自己git rm -rf --cached .之后我正在处理的visual studio项目没有加载。

答案 5 :(得分:3)

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

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

但这会起作用:

# fine to comment here
/node_modules

答案 6 :(得分:3)

我已经完成了 echo node_modules >> .gitignore,但没有奏效。

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

我使用 UTF-8

打开文件并将其转换为 Notepad++

changing encoding in notepad++

现在可以使用了。

我认为他们需要解决这个问题,因为 echo "filetoignore" >> .gitignore 实际上看起来很方便

答案 7 :(得分:3)

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

答案 8 :(得分:1)

我解决了以下问题:

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

有一个简单的原因,为什么.gitignore有时不像它应该的那样工作。这是由于EOL转换行为。

这是

的快速解决方法

修改> EOL转换> Windows格式>保存

您可以责备您的文字编辑器设置

例如:

由于我是Windows开发人员,我通常使用 Notepad ++ 来编辑我的文本,而不像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默认记事本打开同一个文件时,所有内容都应正确格式化。试一试,看看这是否适合你。

答案 9 :(得分:1)

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

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

enter image description here

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

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

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

答案 10 :(得分:1)

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

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

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

答案 11 :(得分:0)

对于iOS用户,此处说明了如何通过.gitignore忽略GitHub中的文件: https://stackoverflow.com/a/57828954/7987502

答案 12 :(得分:0)

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

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

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

TLDR ;如果尚未提交文件,并且仍然不遵守.gitignore的规定,请检查文件编码,并确保其UTF8正确,如果不起作用,则可以尝试将行尾弄乱。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

就我而言

我使用了 git-bash 并编写了以下命令:

<块引用>
echo [Enter_your_file_name.extension] >> .gitignore

然后在 repo 中执行 push 并且它工作正常

答案 15 :(得分:0)

stackoverflow 上有很多答案,但对我有用的并不完全适用于任何特定的答案,我正在以一种简单的方式将所有需要在这里完成的步骤一一记下:

Pre --- 备份 repo 以防万一。 (我没有,但可能会让你感觉更安全)

  1. 确定这是你第一次提交还是更早提交这些文件 被添加并因此被缓存。
  2. 如果是,则 git rm -r --缓存。和 git add 。 (不要错过点)
  3. 如果还是不行,用记事本打开文件

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

Again git rm -r --cached .
    and git add . (do not miss the dot) 

Now do Git status and verify
    what we wanted has happened

答案 16 :(得分:0)

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

git rm --cached filename

说明:

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

--cached 使用此选项可仅从索引中取消暂存和删除路径。工作树文件,无论是否修改,都将保持不变。

--来自https://git-scm.com/docs/git-rm

答案 17 :(得分:0)

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

directory1/*
directory2/*
directory3/*

当我将格式更改为

directory1/
directory2/
directory3/

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