git add的filepattern有否定语法?

时间:2013-04-12 15:02:11

标签: git

假设我想使用git add(或其他一些命令行指令 - 我不能使用.gitignore)为* .hi文件添加所有文件EXCEPT。有没有办法做到这一点?到目前为止,我已经尝试过:

git add '!*.hi'

git add '!(*.hi)'

据我所知,这就是你在glob语法中指定否定的方式,以及你在.gitignore中的表达方式。然而,对于这两个命令,我收到错误fatal: [pattern] did not match any files。对于它的价值,我正在从Windows Powershell运行这些命令。

3 个答案:

答案 0 :(得分:5)

一个纯粹的Git方法是将它们全部添加,然后再次从索引中删除那些你不想要的文件:

git add .
git rm --cached *.hi

--cached只需要从索引中删除它们;否则你会删除这些文件。请注意,git rm将始终“添加删除”到索引,因此,如果跟踪文件,这可能不是您想要的。然后你应该使用git reset作为Klas Mellbourn在评论中提出的建议:

git add .
git reset -- *.hi

答案 1 :(得分:2)

在PowerShell中,这可行:

git add $(Get-ChildItem -Recurse -Exclude '*.hi')

答案 2 :(得分:0)

排除模式是

git add '!:*.hi'

注意分号。

在 PowerShell 中使用 git version 2.28.0.windows.1 进行测试

我发现 this answer to how to use the exclusion pattern in git 很有用