首页 文章

.gitignore不工作

提问于
浏览
1168

我的 .gitignore 文件似乎被git忽略了 - .gitignore 文件是否会被破坏? git期望哪种文件格式,语言环境或文化?

我的 .gitignore

#this is a comment
debug.log
nbproject/

来自 git status 的输出:

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       debug.log
#       nbproject/
nothing added to commit but untracked files present (use "git add" to track)

我希望 debug.lognbproject/ 不会出现在未跟踪的文件列表中 .

我应该从哪里开始寻找解决方法呢?

25 回答

  • 30

    即使你到目前为止还没有跟踪文件,即使你将它们添加到 .gitignore ,git似乎也可以"know" .

    NOTE : 首先提交您当前的更改,否则您将丢失它们 .

    然后从您的git仓库的顶级文件夹运行以下命令:

    git rm -r --cached .
    git add .
    git commit -m "fixed untracked files"
    
  • 0

    如果看起来git没有注意到您对 .gitignore 文件所做的更改,您可能需要检查以下几点

    • 可能存在可能干扰本地文件的全局 .gitignore 文件

    • 在.gitignore文件中添加内容时,请尝试以下操作:

    git add [uncommitted changes you want to keep] && git commit
    git rm -r --cached .
    git add .
    git commit -m "fixed untracked files"
    
    • If you remove something from .gitignore file, and the above steps don't work, try this
    git add -f [files you want to track again]
    git commit -m "Refresh removing files from .gitignore file."
    
    //for example,if you want the .java type file to be tracked again, 
    //the command should be:
    //git add -f *.java
    
  • 0

    固定 . 好吧,我在Windows上的记事本中创建了.gitignore文件,但它无法正常工作 . 当我在linux中查看.gitignore文件时,它看起来像是有组织的乱码 - 也许记事本已经写出了unicode而不是ascii或者任何8位 .

    所以我在我的linux盒子上重写了这个文件,当我把它拉回到windows时它工作正常!欢呼!

  • 11

    如果不向项目添加另一个提交,一行就足以使 .gitignore 工作,因为它应该:

    git rm -r --cached debug.log nbproject
    

    这将从存储库中删除它,但仍然保持它们的物理,用简单的英语,它删除任何与它们相关的更改历史记录,也不会跟踪它们在将来的任何提交中的更改 . 一个更好的解释你可能会发现here .

  • 0

    此问题的另一个原因是语句前的空格或制表符:

    例:

    #Be aware of following:
     notWorkingIgnore.*
    workingIgnore.*
    

    正如评论所指出的那样,尾随空间也是一个问题

    #Be aware of following:
    notWorkingIgnore.* #<-Space
    workingIgnore.*#<-Nospace
    
  • 34

    我注意到 .gitignore 的编码有效 - 如果文件是Unicode,则忽略它,如果它是ASCII,则不是 .

    处理:

    • 验证状态: PS> git status

    • 创建一个函数Get-FileEncoding

    • 测试 .gitignore 的编码: PS> Get-FileEncoding .gitignore

    • Change the encoding到ASCII: PS> Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)

    • 确认: PS> git status

  • 242

    与其他解决方案一样,首先提交并注意您将丢失任何未提交的更改 .

    我有更好的结果:

    git rm -r --cached .
    git reset HEAD --hard
    git status
    

    请注意,状态现在应该没有修改过的文件 .

  • 4

    这里的所有答案实际上都是解决方法 . 您需要在运行 git init 之前创建.gitignore文件,否则 git 永远不会知道您需要忽略这些文件,因为它们已被跟踪 .

    echo .idea/ >> .gitignore
    git init
    

    如果您每天开发,我建议您将习惯性忽略的文件添加到 ~/.gitignore_global 文件中 . 这样, git 就会知道你的文件(意思是"your user",因为它是你主目录中的文件)通常会被忽略 .

  • 4

    还可以查看 directory ,你放在哪里.gitignore它应该在 root of your project

    ./myproject/.gitignore
    

    不在

    ./myproject/.git/.gitignore
    
  • 3

    在我的情况下,这是因为文件已存在于repo中,我试图忽略它 .

    这些是我为解决问题所做的事情:

    • 将文件复制到临时文件夹

    • 从我的项目文件夹中删除它们 .

    • 提交从repo中删除这些文件的更改

    • 将这些文件重新添加到我的项目文件夹中

    到那时,我对这些文件所做的任何更改都会被忽略 .

    我认为你不能忽略repo上已经存在的文件 .

  • 11

    可能会发生 .gitignore 的另一个问题,特别是对于Windows用户,当您命名为 .gitignore (例如 unity.gitignore )时,git不喜欢它 . 你总是想把它命名为 .gitignore ,或者在windows上, .gitignore. ,因为windows认为你试图在没有文件名的情况下重命名它 .

  • 4

    我刚遇到这个问题 . 我的.gitignore文件中的内容继续显示在未跟踪文件列表中 .

    我用它来创建忽略文件:

    echo "node_modules" > .gitignore

    事实证明,双引号对我来说是个问题 . 我删除了忽略文件,然后再次使用该命令,没有引号,它按预期工作 . 我不需要搞乱文件编码 . 我在使用Cmder的Win10机器上 .

    例:

    echo node_modules > .gitignore

  • 85

    对我来说,上述答案都没有奏效 . 我不得不将 .gitignore 文本复制到 exclude.txt 文件中找到

    <Your-project-folder>\.git\info
    

    完成后,刷新更改并删除所有未跟踪的文件 . 照常提交 .

  • 0

    专门针对Windows用户:如果您有未跟踪文件并清除/删除缓存文件不起作用 . 尝试打开powershell并将.gitignore文件转换为UTF-8编码 .

    1)$ Myfile = Get-Content ..gitignore

    2)$ Myfile = | Out-File -Encoding“UTF8”.gitignore

    只需要执行一次编码该目录的.gitignore文件,并且因为每当您编辑该文件时,该文件都会被正确编码未来应该有效 . 我相信这是因为GitHub不会为.gitignore文件读取非UTF-8编码 . 据我所知,这个问题尚未解决Windows问题 . 没有太大的交易,只是在它不工作时调试很痛苦 .

  • 0

    我有同样的问题 . 我认为问题是CR与CR LF的差异 . 我使用cmd(在Windows 7上)和以下命令在我的.gitignore中存储了一些东西:

    坏:

    echo“file_to_be_ignored.py”>> .gitignore echo“*〜”>> .gitignore

    等等 .

    问题是这个命令没有为git放置正确的行结束标记来识别换行符(当git期望另一行时,CR或CR LF) . 我通过手动替换vim中的每个换行符来解决问题(vim到救援!)并且它工作得很好 .

    尝试在记事本或vim(理想情况下)中编辑.gitignore,即使文件看起来格式正确,也请尝试替换换行符 . 听起来很奇怪,我知道,但为我工作 . :d

  • 12

    我有这个问题,包含这一行的.gitignore:

    lib/ext/
    

    我刚才意识到,这个目录实际上是一个指向其他地方文件夹的符号链接:

    ls -la lib/ext/
    lrwxr-xr-x 1 roipoussiere users 47 Feb  6 14:16 lib/ext -> /home/roipoussiere/real/path/to/the/lib
    

    lib/ext/ 行,git实际上查找文件夹,但符号链接是文件,因此我的lib文件夹不会被忽略 .

    我通过在我的.gitignore上用 lib/ext 替换 lib/ext/ 来解决这个问题 .

  • 147

    我的问题是(如OP所建议的)一个损坏的.gitignore文件 . 在其他一切都失败之前,我不相信这是可能的并且忽略了这种可能性 . 损坏 didn't show up in vi ,但文件的开头有两个字节导致.gitignore文件被忽略 . 对我来说,这些只在我输入 cat .gitignore 时出现,显示:

    ��# Built application files
    *.apk
    *.ap_
    
    # ...
    

    不知道这些是如何结束的,但重新创建文件解决了问题 . 对损坏文件的十六进制分析显示如下:

    user@dev ~/project/myproject $ xxd -b .gitignore 
    00000000: 11111111 11111110 00100011 00000000 00100000 00000000  ..#. .
    00000006: 01000010 00000000 01110101 00000000 01101001 00000000  B.u.i.
    
  • 5

    还有一点需要注意的是,您是否使用正确的行结尾保存.gitignore文件?

    WINDOWS:如果您在Windows中使用它,是否使用Windows行结尾保存它?默认情况下,并非所有程序都会执行此操作,记事本和许多php编辑器默认使用linux行结尾,因此文件将与服务器兼容 . 检查这个的一个简单方法是在Windows记事本中打开文件 . 如果所有内容都显示在一行上,则该文件以linux行结尾保存 .

    LINUX:如果您在linux环境中使用该文件时遇到问题 . 在emacs或nano等编辑器中打开文件 . 如果您看到任何不可打印的字符,则该文件与Windows行结尾一起保存 .

  • 19

    好的,所以在我的情况下,接受的解决方案不起作用,这里描述的是有效的:

    https://ericnelson.wordpress.com/2014/06/21/is-visual-studio-2013-ignoring-your-gitignore-file/

    简而言之:

    • 关闭Visual Studio .

    • 导航到.git文件夹

    • 删除ms-persist.xml

    • 重新启动Visual Studio

    希望这有时可以帮助某人

  • 5

    刚刚通过以下命令删除了先前在git中提交的文件夹或文件,然后gitignore文件将反映正确的文件 .

    git rm -r -f "folder or files insides"
    
  • 7

    如果您有内联注释,则.gitignore文件将不起作用,如下所示:

    foo/bar # The bar file contains sensitive data so we don't want to make this public
    

    把它改成这个:

    # The bar file contains sensitive data so we don't want to make this public
    foo/bar
    
  • 2468

    我有点问题 . 我能够访问www.GitHub.com/project并使用UI删除该文件,并将该更改添加到主仓库 .

    看起来我在制作.gitignore之前将文件添加到了repo中 . 这似乎有效 .

  • 6

    如果您是记事本用户,请尝试执行以下操作:

    使用记事本打开.gitignore文件并执行:

    Edit > EOL Conversion > Windows Format > Save

    尝试再次使用git status,看看它是否适合你 .

    我已经发布了类似问题的回答here .

  • 3

    对我来说这是另一个问题 . 我的.gitignore设置为忽略除了我告诉它不要忽略的东西之外的所有东西 . 像这样:

    /*
    !/content/
    

    现在这显然意味着我也告诉git忽略.gitignore本身 . 只要我没有跟踪.gitignore,这不是问题 . 但在某些时候我提交了.gitignore本身 . 这导致.gitignore被正确忽略 .

    所以再添加一行修复它:

    /*
    !/content/
    !.gitignore
    
  • 0

    您也可以使用 sudo 命令编辑 .gitignore 文件 . 我遇到了同样的问题,在执行命令时: git status ,我仍然可以看到"should be ignored"文件 .

    nano .gitignore 而不是 sudo nano .gitignore 编辑后,我可以看到正确的反射 .

相关问题