.gitignore和git rm--缓存不会阻止跟踪文件

.gitignore和git rm--缓存不会阻止跟踪文件,git,Git,我有一个android项目,它有一个测试模块,可以删除并重新创建git目录子目录中的.apk文件 我已经将它们添加到.gitignore(目录、文件和*.apk)中,然后我完成了 git rm -r --cached src/main/Tests/bin git告诉我: rm 'src/main/Tests/bin/Tests-debug-unaligned.apk' rm 'src/main/Tests/bin/Tests-debug.apk' rm 'src/main/Tests/bin/

我有一个android项目,它有一个测试模块,可以删除并重新创建git目录子目录中的.apk文件

我已经将它们添加到.gitignore(目录、文件和*.apk)中,然后我完成了

git rm -r --cached src/main/Tests/bin
git告诉我:

rm 'src/main/Tests/bin/Tests-debug-unaligned.apk'
rm 'src/main/Tests/bin/Tests-debug.apk'
rm 'src/main/Tests/bin/Tests.ap_'
rm 'src/main/Tests/bin/classes.dex'
我那么

git commit . -m "removed apk files"
我再次运行测试,删除文件并重新创建它们。我运行git status,它们显示为已修改。看来,它不起作用了。这是我的.gitignore文件

*ipr
*iml
*iws
.gitignore
out/
*apk
src/main/Tests/bin
src/main/Tests/bin/*
src/main/Tests/bin/Tests-debug-unaligned.apk
你刚才试过了吗

*.apk

在你的电脑里,你忽略了吗?如果以前跟踪过它们,则需要在设置.gitignore之前删除它们并提交。退出后,将条目添加到.gitignore文件中,它应该可以工作。

我认为您需要使用以下方法清理所有暂存文件:

git rm -r --cached .

git add -A
然后提交:

git commit -m ".gitignore"

但请确保在执行此操作之前提交您的更改。

我刚刚尝试了您的配方,它对我有效

~ % mkdir deleteme
~ % cd deleteme
~/deleteme % mkdir src src/main src/main/Tests src/main/Tests/bin
~/deleteme % touch src/main/Tests/bin/blah.apk                   
~/deleteme % git init
Initialized empty Git repository in /Users/sri/deleteme/.git/
~/deleteme (master*) % touch src/main/hello.txt
~/deleteme (master*) % git add .
~/deleteme (master*) % git commit -m "init"
[master (root-commit) 0ef5764] init
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 src/main/Tests/bin/blah.apk
 create mode 100644 src/main/hello.txt
~/deleteme (master) % vi .gitignore
~/deleteme (master) % git rm -r --cached src/main/Tests/bin
rm 'src/main/Tests/bin/blah.apk'
~/deleteme (master*) % git commit -m "removed"
[master 5ca6456] removed
 0 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 src/main/Tests/bin/blah.apk
~/deleteme (master) % touch src/main/Tests/bin/blah.apk    
~/deleteme (master) % git status
# On branch master
nothing to commit (working directory clean)
~/deleteme (master) %  
可能是其他目录(或全局指令)中的gitconfig覆盖了您在gitconfig中声明的内容。您没有提到此gitconfig的位置。请参阅gitignore的手册页或联机帮助文档,了解可以在其中指定忽略规则的各个位置的优先级。手册上说

…按以下顺序 优先级,从最高到最低(在一个优先级内,最后一个匹配 模式决定结果): 从命令行读取的支持 他们


我提交文件的删除。我知道它“应该可以工作”,但是它不能。*apk以及它们所在的目录和一个绝对路径,这只是为了更好地衡量,相同的结果是清理.gitignore文件,使其不包含任何.apk条目。犯罪删除apk文件。git添加-A并提交。只需将*.apk添加到忽略文件。犯罪您现在应该正确地忽略这些文件。您可以通过执行git重置将所有清理工作压缩为一次提交—soft head~3&&git add-a&&git commit-m“fixed ignore”是因为您在删除它们之后没有将它们添加到.gitignore吗?
   o   Patterns read from a .gitignore file in the same directory as the path, or in any
       parent directory, with patterns in the higher level files (up to the toplevel of the
       work tree) being overridden by those in lower level files down to the directory
       containing the file. These patterns match relative to the location of the .gitignore
       file. A project normally includes such .gitignore files in its repository, containing
       patterns for files generated as part of the project build.

   o   Patterns read from $GIT_DIR/info/exclude.

   o   Patterns read from the file specified by the configuration variable core.excludesfile