Php phar在创建tar存档时排除目录

Php phar在创建tar存档时排除目录,php,directory,tar,phar,Php,Directory,Tar,Phar,我想使用内置的PharData类在PHP脚本中创建一个tar存档 我希望tar归档文件表示一个目录,因此我想到使用PharData::buildFromDirectory()来实现这一点。不幸的是,该目录也是一个git存储库,其中有一个比目录本身大得多的.git文件夹 因此,我需要从存档中删除.git目录(理想情况下也是.idea目录…),因为它会不必要地膨胀 到目前为止我所尝试的: 使用正则表达式筛选出目录: $archive->buildFromDirectory("..", "@^

我想使用内置的
PharData
类在PHP脚本中创建一个tar存档

我希望tar归档文件表示一个目录,因此我想到使用
PharData::buildFromDirectory()
来实现这一点。不幸的是,该目录也是一个git存储库,其中有一个比目录本身大得多的
.git
文件夹

因此,我需要从存档中删除
.git
目录(理想情况下也是
.idea
目录…),因为它会不必要地膨胀

到目前为止我所尝试的:

  • 使用正则表达式筛选出目录:

    $archive->buildFromDirectory("..", "@^(?!.git).+@");
    
    这没用

  • 使用
    PharData::delete()
    ,但不幸的是,这似乎只删除了一个文件而不是一个目录


那么,做我想做的事情的最佳方式是什么

正则表达式的问题在于,文件的完整路径得到匹配,而不仅仅是目录(basename)。因此,您无法过滤掉
.git
目录本身

使用字符类求反(
[^.][^g][^i][^t]
)也没有帮助,因为路径的某些部分确实与此正则表达式匹配,因此路径仍然匹配

这意味着您只能使用正匹配


您可以使用,然后使用筛选出文件。
在这里,您可以定义自己的匹配方法来正确过滤。

我看到了以下使用负前瞻排除git目录的方法:

$phar->buildFromDirectory(uuu DIR_uuu,'/^((?!\.git)。*$/')