我有一个用于多个项目的通用 git“post-receive”脚本,如果根目录中存在 /app/ 或 /public/ 文件夹,它需要执行不同的操作。
使用:
FOLDERS=`git ls-tree -d --name-only -z master`;
我可以看到目录列表,并且我想使用 bash 中的 RegExp 支持来运行如下命令:
if [[ "$FOLDERS" =~ app ]]; then
...
fi
但如果有类似“应用程序”文件夹的东西,那将不起作用......我在 git“ls-tree”命令中指定了“-z”选项,所以我可以使用 \0(空)字符作为分隔符,但不确定如何在 bash RegExp 中测试它。
同样,我知道在 ls-tree 命令中支持指定特定路径,然后可以将其通过管道传递给“wc -l”,但我认为获取根目录的完整目录列表会更快(不是递归)然后使用返回的输出测试 2 个(或更多)文件夹。
看起来 NULL 字符丢失(或被忽略),就好像列表中包含“app”和“httpd”一样,它将匹配字符串“apphttpd”。
所以我现在已经多次调用“git ls-tree”来查看每个文件是否存在。