我正在使用PHP构建一个类,用于通过GitLab中的Web挂钩进行部署。
显然要挂钩的文件需要从网上获得并存在于docroot中。
但是为了正确地提取repo,我需要从docroot向上递归并找到包含.git目录的目录。
我找不到向上递增的迭代器。
我试过了Recursive Directory Iterator
但是从顶级目录递归并且不起作用,因为我可能有几个目录可能包含.git目录。
在找到.git目录的第一个实例之前,我将如何向上递归?
答案 0 :(得分:0)
好的,这似乎可以解决问题,可能有一种更简单的方法,但这非常干净地达到目的。
private function __seek() {
$directories = array();
$dirs = explode('/', dirname(__FILE__));
// remove empty first item
array_shift($dirs);
// remove the top/home directory as we won't be able to read it anyway
$count = (count($dirs) - 1);
for ($i = 0; $i < $count; $i++):
$directories[] = '/' . implode('/', $dirs);
array_pop($dirs);
endfor;
$paths = array();
foreach ($directories as $directory):
if (in_array('.git', scandir($directory))):
$paths['parent'] = dirname($directory);
$paths['directory'] = basename($directory);
endif;
endforeach;
return $paths;
}
这会返回一个很好的数组,我可以将我需要chdir()
拉到的目录(父)和拉到的目录名(目录)
Array
(
[parent] => /home/solution
[directory] => app
)
答案 1 :(得分:0)
傻傻的我......
事实证明,GIT是如此直观,以至于上游搜索你。
我只是尝试从5个目录深入,它完美地工作。
您可以从.git目录下的任何目录中提取。
GIT FTW!