【问题标题】:Gitignore not workingGitignore 不工作
【发布时间】:2014-10-15 16:13:19
【问题描述】:

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

*.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 上。

【问题讨论】:

标签: git gitignore


【解决方案1】:

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

请记住在执行此操作之前提交您所做的所有更改!

git rm -rf --cached .
git add .

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

【讨论】:

  • 或者您可以尝试使用 git checkout folder_to_ignore/* 恢复您添加到 .gitignore 的文件/文件夹
  • 我认为最好 git 添加一个 'git ignore' 命令来简化这一点。因此我们可以随时使用git ignore path/file
  • 你成就了我的一天!
  • 工作就像一个魅力!谢谢! +1
  • 如果您想从文件夹foldername 中删除文件,请使用git rm -rf --cached foldernamegit add foldername。这样您就不必提交所有其他文件
【解决方案2】:

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

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

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

git rm -r --cached .

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

git add .

提交:

git commit -m ".gitignore is now working"

【讨论】:

  • 确保将您的分支合并回 master 或移动您的指针,因为当我尝试这样做时,我丢失了两个功能分支。幸运的是,我没有丢失任何工作,我最近从工作分支进行的所有更新都被重置到了主分支,但根据您的设置,这种行为可能是不可取的。
  • 您将如何使用此命令从缓存中删除文件夹而不是文件?
  • 通过 git rm -r --cached 。您删除了我之前的更改,谢谢
  • 他确实说过要先提交任何未完成的代码更改...
  • git rm --cached filename 就像一个魅力!谢谢!
【解决方案3】:

@Ahmad 的答案有效,但如果您只想 git 忽略 1 个特定文件或少数文件,请按照 @Nicolas 的建议进行操作

第 1 步

将文件名添加到 .gitignore 文件

第二步

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

git rm --cached filename

第三步

提交更改 git add filename

git commit -m "add filename to .gitignore"

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

【讨论】:

  • 如果你有一个目录而不是一个可以使用的文件,也可以在 Step2 中使用:git rm -r --cached directoryname
【解决方案4】:

在尝试遵循这个问题的答案(可能是因为我必须在视觉工作室项目中这样做)之后,我发现更简单的路径是

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

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

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

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

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

【讨论】:

  • 我非常喜欢这种方法 - 似乎破坏性较小,即使它不被认为是“适当的”。
  • 这是在 Android Studio 上真正为我工作的唯一解决方案,谢谢!
【解决方案5】:

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

然后我查看了行尾旁边,发现它是使用 UTF16 保存的。因此,我使用 UTF8 编码重新保存,瞧,它起作用了。我认为 CRLF 并不重要,所以我将其改回 LF 以确保它仍然有效。

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

TLDR;如果你还没有提交文件并且 .gitignore 仍然没有被尊重,那么检查文件编码,并确保它的 UTF8,如果这不起作用,那么可以尝试弄乱行尾。

【讨论】:

  • UTF16 是我的罪魁祸首。打开VS代码>打开.gitignore>打开命令提示符>“更改文件编码”>“UTF-8”>保存文件
  • 使用 "blah blah" > file.txt (echo) 在 PowerShell 中创建文件,但文件是 UTF16。修复:$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
  • 我喜欢你在这里包含了很多可能性。
【解决方案6】:

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

【讨论】:

    【解决方案7】:

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

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

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

    现在可以使用了。

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

    【讨论】:

    • 这解决了我的问题。除了这个没有任何工作?
    • 呃。这是一个令人头疼的问题。我会让 node_modules 安宁
    • @Gilboot 如果您将它包含在您的存储库中,该文件夹将破坏您的整个体验。推送更改需要很长时间,并且您的存储库的大小将难以承受,尤其是文件数量。进行此更改将节省您的时间。如果你没有notepad++,你可以简单地用普通的notpad打开文件并使用SaveAs,然后在“Save”按钮的左边,你可以将编码设置为“UTF-8”并保存.gitignore文件。这也会让它工作
    • 遇到了同样的问题。我使用常规记事本重新创建了 .gitignore 文件并保存为 UTF-8。
    • 同样的问题。我使用 vscode 主编辑器删除/重新创建了文件,它工作正常。不过可能只是更改了文件格式。
    【解决方案8】:

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

    【讨论】:

      【解决方案9】:

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

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

      【讨论】:

      • 我必须结合接受的答案执行上述操作才能使事情正常进行。真的是个鬼鬼祟祟的问题,因为 .gitignore 在 VS 编辑器、Notepad++ 等乍一看还不错,但显然 Git 的 Windows 实现无法在 Windows 环境中处理 Unix 换行符。
      【解决方案10】:

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

      git rm --cached filename

      解释:

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

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

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

      【讨论】:

        【解决方案11】:

        此外,cmets 必须在自己的路线上。它们不能放在条目之后。所以这行不通:

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

        但这会起作用:

        # fine to comment here
        /node_modules
        

        【讨论】:

          【解决方案12】:

          添加我的一点,因为这是一个流行的问题。

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

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

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

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

          【讨论】:

            【解决方案13】:

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

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

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

            【讨论】:

              【解决方案14】:

              有人可能会觉得这很有用。我的问题是格式。由于某种原因,并且没有进行任何更改,git 不喜欢文件内容的格式。 .gitignore 中的目录是这样的:

              directory1/*
              directory2/*
              directory3/*
              

              当我将格式更改为

              directory1/
              directory2/
              directory3/
              

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

              【讨论】:

                【解决方案15】:

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

                【讨论】:

                • 请忽略我上面的评论。有人在工作中在 Git 中做错了什么,导致文件夹重复,我很长一段时间都没有意识到。谢谢。
                【解决方案16】:

                就我而言

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

                echo [Enter_your_file_name.extension] >> .gitignore
                

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

                【讨论】:

                • 有趣的是,我就是这样弄坏了我的。
                • @RoboticRenaissance 这有什么问题吗?请让我通知..谢谢:)
                【解决方案17】:

                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
                

                【讨论】:

                  【解决方案18】:

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

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

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

                  【讨论】:

                    猜你喜欢
                    • 2015-02-24
                    • 2018-10-29
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-07-02
                    • 1970-01-01
                    • 2022-10-14
                    • 2023-01-02
                    • 1970-01-01
                    相关资源
                    最近更新 更多