在.gitignore中忽略父文件夹时跟踪文件

在.gitignore中忽略父文件夹时跟踪文件,git,bitbucket,gitignore,Git,Bitbucket,Gitignore,因此,我在gitignore中有/vendor,并希望排除子文件夹中的一些文件,但这不起作用,它们仍然被忽略。检查了git文档,这里有一些线程,但仍然不走运,知道我遗漏了什么吗 这就是我得到的: vendor !vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php !vendor/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswor

因此,我在gitignore中有/vendor,并希望排除子文件夹中的一些文件,但这不起作用,它们仍然被忽略。检查了git文档,这里有一些线程,但仍然不走运,知道我遗漏了什么吗

这就是我得到的:

vendor
!vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php
!vendor/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php

您可以使用git add-f强制添加它们一次,之后它们将在回购中保持跟踪:

git add -f vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php
git add -f vendor/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php
如评论中所述,根据

可选前缀“!”否定模式;先前模式排除的任何匹配文件都将再次包含。如果文件的父目录被排除,则无法重新包含该文件。出于性能原因,Git不会列出排除的目录,因此包含的文件上的任何模式都不会产生任何影响,无论它们定义在何处

如果您尝试在文件上使用
检查ignore
,以确定哪个规则忽略文件,这一点也很清楚:

Test $ mkdir -p vendor/laravel/framework/src/Illuminate/Auth/Passwords && touch vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php

Test $ cat .gitignore 
vendor
!vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php

Test $ git check-ignore -v vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php
.gitignore:1:vendor vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php

Test $ git add vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php
The following paths are ignored by one of your .gitignore files:
vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php
Use -f if you really want to add them.

您可以使用git add-f强制添加它们一次,之后它们将在回购中保持跟踪:

git add -f vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php
git add -f vendor/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php
如评论中所述,根据

可选前缀“!”否定模式;先前模式排除的任何匹配文件都将再次包含。如果文件的父目录被排除,则无法重新包含该文件。出于性能原因,Git不会列出排除的目录,因此包含的文件上的任何模式都不会产生任何影响,无论它们定义在何处

如果您尝试在文件上使用
检查ignore
,以确定哪个规则忽略文件,这一点也很清楚:

Test $ mkdir -p vendor/laravel/framework/src/Illuminate/Auth/Passwords && touch vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php

Test $ cat .gitignore 
vendor
!vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php

Test $ git check-ignore -v vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php
.gitignore:1:vendor vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php

Test $ git add vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php
The following paths are ignored by one of your .gitignore files:
vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php
Use -f if you really want to add them.

根据文档中的for Pattern Format for the!字符:“如果文件的父目录被排除,则不可能重新包含该文件。”根据针对的模式格式的文档,您为什么不需要忽略来自
供应商的文件呢!字符:“如果文件的父目录被排除,则无法重新包含该文件。”为什么不需要忽略来自
供应商的文件?