用本地.git / info / exclude覆盖子目录gitignore的“必须包括”规则

时间:2019-10-03 11:53:07

标签: git gitignore

假设我具有以下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

1 个答案:

答案 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,并仅忽略那些不需要的文件。