.gitignore问题,不会忽略文件

时间:2016-07-19 03:40:36

标签: git gitignore

我的.gitignore包含以下内容:

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

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

当我运行添加命令时:

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

我希望忽略其中一个匹配的文件。 为什么要添加?根据路径,它应该与上面的匹配。

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

我尝试删除整个.git目录并再次git init从空白平板开始,然后仍然添加该文件。

3 个答案:

答案 0 :(得分:1)

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

➜  ~ 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 :(得分:0)

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

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

首先从Git中“删除”所有内容,然后重新添加,遵守.gitignore个文件。

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

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

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

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

或仅仅是options/

下的'任何'
deploy/media/customoptions/options/*

请记住,*也匹配目录,Git supports ignoring whole directories,所以即使以下内容也可以使用

deploy/media/customoptions/options/

答案 2 :(得分:0)

由于答案already given描述它应该有效,所以这里有两个关于可能出错的想法:

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