我想使用内置的PharData
类在PHP脚本中创建tar存档。
我希望tar存档代表一个目录,所以我想用PharData::buildFromDirectory()
来做这件事。不幸的是,该目录也是一个git存储库,其中有一个.git
文件夹,它比目录本身大得多。
所以我需要从归档中删除.git
目录(理想情况下也是.idea
目录...),因为它会不必要地膨胀它。
到目前为止我尝试了什么:
使用正则表达式过滤目录:
$archive->buildFromDirectory("..", "@^(?!.git).+@");
哪个不起作用。
使用PharData::delete()
,但不幸的是,它似乎只删除了一个文件而不是目录。
那么,做我想做的最好的方法是什么?
答案 0 :(得分:2)
正则表达式的问题在于文件的完整路径不仅与目录(basename)匹配。因此,您无法过滤掉.git
目录本身。
使用字符类否定([^.][^g][^i][^t]
)也无济于事,因为路径的某些部分与此正则表达式匹配,因此路径仍然匹配。
这意味着您只能使用正面匹配。
您可以使用Phar::buildFromIterator,然后使用RecursiveFilterIterator过滤掉文件。 在那里,您可以定义自己正确过滤的匹配方法。
答案 1 :(得分:2)
我已经看到以下用于使用否定前瞻来排除git目录:
parse(...)