【问题标题】:.gitignore not working: files that should be ignored still get committed.gitignore 不工作:应该被忽略的文件仍然被提交
【发布时间】:2021-07-28 21:41:33
【问题描述】:

我正在尝试从现有文件夹创建一个新的 git 存储库。我在文件夹的根目录中创建了一个.gitignore 文件。但是如果我说

git add *
git commit
git push

应该忽略的文件仍会提交到远程存储库。我在 Windows 上。 我还购买了 SmartGIT 的许可证。它似乎也忽略了.gitignore。我必须手动选择要提交的新文件。

【问题讨论】:

  • 你使用的是什么版本的 Git?此外,您提到您使用的是 Windows,因此路径名分隔符总是很麻烦。您能否发布一个无法按预期工作的 .gitignore 文件示例?
  • 您能否编辑您的问题并发布您的.gitignore 文件的内容? .gitignore 将使用底层操作系统特定的 fnname() 方法:例如:stackoverflow.com/questions/2330471stackoverflow.com/questions/1470572
  • 我没有听说过 SmartGIT - 我使用 MSysGit 和 TortoiseGit,它们似乎可以很好地处理 .gitignore 文件。如果问题出在 SmartGIT 上,那么我会尝试 MSysGit 和 TortoiseGit 的替代方案。
  • 发布git status的结果和.gitignore的内容。在 msysgit 上,目录分隔符是正斜杠:/,你觉得怎么样?
  • 查看this question,它更详细地介绍了这一领域...

标签: git


【解决方案1】:

改用“git add .”。

另外,它适用于我(在 Linux 上):

$ 混帐初始化 $ echo foo > .gitignore $ 回声 foo > foo $回声栏>栏 $ git add -v * 您的 .gitignore 文件之一会忽略以下路径: 富 如果您真的想添加它们,请使用 -f。 致命:没有添加文件

【讨论】:

    【解决方案2】:

    您的文件仍必须被跟踪,您可以通过 git status 看到,这将显示您的文件已被修改,即使它位于 .gitignore
    你需要这样做:

    git update-index --assume-unchanged [path_to_file]
    

    【讨论】:

      【解决方案3】:

      您的文件是否已被跟踪? .gitignore 只会让 cmets 对未跟踪的文件保持沉默,但不会阻止跟踪的文件被跟踪。

      【讨论】:

        【解决方案4】:

        我也遇到了 .gitignore 的问题。我查看了列出的链接答案,解决了一半的问题。

        真正让 gitignore 完全为我工作的是在文件的第一行添加注释。 Git 没有解析位于第一行的排除项。

        干杯

        【讨论】:

        • 在 windows 上添加评论也对我有用。为你 +1!
        • 可悲的是,我首先为自己弄清楚了这一点……然后找到了您的评论。现在来看看这是否是一个应该修复的错误!
        【解决方案5】:

        您可以创建一个 UTF-8 编码的文本文件。尝试将其保存为 ANSI 编码。在 git bash 中,可以使用 vi -b 进行验证。

        【讨论】:

        • 似乎是原因。我没有使用vi -b,但在从头开始重写 .gitignore 后它工作了
        【解决方案6】:

        我在 Windows 上遇到的一个技巧是使用 echo(根据 Jakub Narębski 的回答)你必须小心使用空格。

        正如您在重定向运算符对实际忽略产生影响之前的任何空格所见。

        C:\test>dir /B
        TOBEIGNORED
        
        C:\test>echo TOBEIGNORED > .gitignore
        C:\test>git status
        [...]
        # Untracked files:
        #   (use "git add <file>..." to include in what will be committed)
        #
        #       .gitignore
        #       TOBEIGNORED
        C:\test>echo TOBEIGNORED> .gitignore
        C:\test>git status
        [...]
        # Untracked files:
        #   (use "git add <file>..." to include in what will be committed)
        #
        #       .gitignore
        nothing added to commit but untracked files present (use "git add" to track)
        

        【讨论】:

        • 是的,不要在 WINDOWS 上使用 ECHO,否则你会浪费 3 个小时来弄清楚为什么 .gitignore 根本不起作用
        【解决方案7】:

        可能您的排除文件掩码不准确。

        【讨论】:

        • 我从另一个项目中复制了 .gitignore 文件,它可以工作。
        • git 用户可以访问 .gitignore 吗?可能是权限问题?
        【解决方案8】:

        我在 MacOSX 上使用 git 版本 1.7.12.3 并且 .gitignore 的第一行也没有考虑在内。只需在第一行添加评论即可。

        【讨论】:

          【解决方案9】:

          作为文件第一行的注释行很关键!我花了相当多的时间试图排除文件,却发现 GIT 忽略了忽略文件中的第一行。

          【讨论】:

          • 这绝对不是问题。我几乎没有一个 gitignore 文件(约 50 个)在第一行有注释,而且它们都能完美运行。
          【解决方案10】:

          我最后做了echo node_modules &gt;&gt; .gitignore,但它不起作用。

          windows 终端将文件保存在UCS-2 LE BOM 中,git 不接受。

          当我用Notepad 打开文件并用UTF-8 编码保存它时,它后来工作了

          那时它工作得很好。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-10-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-07-12
            • 2020-10-13
            • 1970-01-01
            • 2014-05-22
            相关资源
            最近更新 更多