.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/*/*/*/*
进行了测试,两者都有效。这些是您在示例中显示的内容。你可能做错了什么,所以试试我在测试中展示的内容。
正如答案 描述的那样它应该有效,这里有两个关于可能出错的想法:
- Git 仅忽略 new 文件。如果您的存储库中已经有文件
deploy/media/customoptions/options/998/4325/200x/200-ntlrope.jpg
,git add
将愉快地将此文件的更改暂存到索引中。要么从存储库中删除文件 (git rm --staged <filename>
),要么告诉 Git 从不检查此文件的修改 (git update-index --assume-unchanged <filename>
)。
- 你把你的
.gitignore
放在哪里了?路径始终相对于此文件的目录。因此,您可以将文件放在目录 deploy/media/customoptions/
中并向其添加 options/
以忽略目录 deploy/media/customoptions/options
及其所有内容。或者你可以将它放在你的存储库的根目录中,完整路径为 deploy/media/customoptions/options/
.
我的 .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/*/*/*/*
进行了测试,两者都有效。这些是您在示例中显示的内容。你可能做错了什么,所以试试我在测试中展示的内容。
正如答案
- Git 仅忽略 new 文件。如果您的存储库中已经有文件
deploy/media/customoptions/options/998/4325/200x/200-ntlrope.jpg
,git add
将愉快地将此文件的更改暂存到索引中。要么从存储库中删除文件 (git rm --staged <filename>
),要么告诉 Git 从不检查此文件的修改 (git update-index --assume-unchanged <filename>
)。 - 你把你的
.gitignore
放在哪里了?路径始终相对于此文件的目录。因此,您可以将文件放在目录deploy/media/customoptions/
中并向其添加options/
以忽略目录deploy/media/customoptions/options
及其所有内容。或者你可以将它放在你的存储库的根目录中,完整路径为deploy/media/customoptions/options/
.