假设我具有以下git存储库结构
> tree -a
.
├── .git
│ ├── info
│ │ └── exclude
└── a
├── .gitignore
├── mustinclude.txt
└── my-local-file-to-ignore.txt
而gitignore文件表示始终跟踪txt文件
> cat a/.gitignore
*
!*.txt
是否可以配置git,使其仅为我自己忽略a/my-local-file-to-ignore.txt
?这样做的动机是我想包括本地暂存文件(用于测试或进行其他操作),但我不希望其他使用存储库的人知道此类文件的存在。
我尝试过将该文件放入info / exclude文件中,但是它不起作用。我认为这是因为a中的gitignore文件始终包含txt文件。
> cat .git/info/exclude
a/my-local-file-to-ignore.txt
> git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: mustinclude.txt
new file: my-local-file-to-ignore.txt
答案 0 :(得分:0)
.gitignore
的优先级高于$GIT_DIR/info/exclude
。
Git通常会按照以下优先顺序(从最高到最低)从多个来源检查
gitignore
模式(在一个优先级别内,最后一个匹配模式决定结果):
从命令行读取支持这些命令的模式。
从与路径相同的目录或任何父目录中的
.gitignore
文件中读取的模式,其中的较高级别文件(直到工作树的顶层)中的模式被覆盖较低级别文件中的文件,直到包含该文件的目录。这些模式相对于.gitignore
文件的位置匹配。项目通常在其存储库中包含此类.gitignore
文件,其中包含作为项目构建的一部分而生成的文件的模式。从
$GIT_DIR/info/exclude
读取的模式。从配置变量
core.excludesFile
指定的文件中读取模式。
根据gitignore
手册。 $GIT_DIR/info/exclude
是您仅想自己在本地忽略文件时应使用的文件。问题在于a/.gitignore
中的模式过度匹配。
要实现所需的功能,您需要从*
中删除全局忽略模式a/.gitignore
,并仅忽略那些不需要的文件。