从Docroot递归搜索.git目录

时间:2014-04-04 21:03:17

标签: php git recursion

我正在使用PHP构建一个类,用于通过GitLab中的Web挂钩进行部署。

显然要挂钩的文件需要从网上获得并存在于docroot中。

但是为了正确地提取repo,我需要从docroot向上递归并找到包含.git目录的目录。

我找不到向上递增的迭代器。

我试过了Recursive Directory Iterator

但是从顶级目录递归并且不起作用,因为我可能有几个目录可能包含.git目录。

在找到.git目录的第一个实例之前,我将如何向上递归?

2 个答案:

答案 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!