.gitignore 问题,不忽略文件

.gitignore issues, doesn't ignore file

我的 .gitignore 包含以下内容:

deploy/media/customoptions/options/*/*/70x/*
deploy/media/customoptions/options/*/*/200x/*
deploy/media/customoptions/options/*/*/*/*

我意识到这比它真正需要的要多一些,但我一直在测试不同的模式以尝试让它工作。

当我 运行 添加命令时:

git add deploy/media/customoptions/ --verbose --dry-run

我想忽略其中一个匹配的文件。 为什么要添加这个?根据路径,应该符合上面的true。

deploy/media/customoptions/options/998/4325/200x/200-ntlrope.jpg

我已经尝试删除整个 .git 目录并再次 git init 重新编辑它以从空白开始,并且仍然添加该文件。

首先,您不必删除 .git 目录来重新设置忽略的文件。以下两个命令应重新设置所有内容并忽略 .gitignore:

中的相关部分
git rm -r --cached .
git add -A

这将首先 "remove" 来自 Git 的所有内容,然后重新添加回来,服从 .gitignore 文件。


就您的模式而言,您似乎正试图忽略

之后的所有内容
deploy/media/customoptions/options

在这种情况下,您可以使用 globstar 模式

deploy/media/customoptions/options/**/*

或者只是 'anything' 在 options/

deploy/media/customoptions/options/*

记住 * 也匹配目录,Git supports ignoring whole directories,所以即使是下面的也应该工作

deploy/media/customoptions/options/

使用我在评论中提到的内容进行测试:

➜  ~ mkdir test
➜  ~ cd test
➜ git init
Initialized empty Git repository in /home/jhvisser/test/.git/
➜  mkdir deploy/media/customoptions/options/998/4325/200x/ -p
➜  echo "test" > deploy/media/customoptions/options/998/4325/200x/200-ntlrope.jpg
➜  git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        deploy/

nothing added to commit but untracked files present (use "git add" to track)
➜  git add deploy/media/customoptions/ --verbose --dry-run
add 'deploy/media/customoptions/options/998/4325/200x/200-ntlrope.jpg'
➜  echo "deploy/media/customoptions/options/*" > .gitignore
➜  cat .gitignore
deploy/media/customoptions/options/*
➜  git status
On branch master

Initial commit

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)
➜  git add deploy/media/customoptions/ --verbose --dry-run
➜

因此只尝试 deploy/media/customoptions/options/*

我还用 deploy/media/customoptions/options/*/*/200x/*deploy/media/customoptions/options/*/*/*/* 进行了测试,两者都有效。这些是您在示例中显示的内容。你可能做错了什么,所以试试我在测试中展示的内容。

正如答案 描述的那样它应该有效,这里有两个关于可能出错的想法:

  1. Git 仅忽略 new 文件。如果您的存储库中已经有文件 deploy/media/customoptions/options/998/4325/200x/200-ntlrope.jpggit add 将愉快地将此文件的更改暂存到索引中。要么从存储库中删除文件 (git rm --staged <filename>),要么告诉 Git 从不检查此文件的修改 (git update-index --assume-unchanged <filename>)。
  2. 你把你的 .gitignore 放在哪里了?路径始终相对于此文件的目录。因此,您可以将文件放在目录 deploy/media/customoptions/ 中并向其添加 options/ 以忽略目录 deploy/media/customoptions/options 及其所有内容。或者你可以将它放在你的存储库的根目录中,完整路径为 deploy/media/customoptions/options/.