O gitlab já usa o gancho pós-recebimento internamente. você pode mexer com esse script e chamar o seu gancho também, mas a partir dos documentos parece que a maneira "oficial" seria usar "web-hooks", ou seja, deixar gitlab chamar seu servidor web no pós-recebimento e seu servidor web então puxa o repositório. Eu não tentei isso sozinho, mas como ninguém respondeu até agora, pensei em apontar você nessa direção:
para permitir que os web-hooks entrem na página principal do seu projeto e selecione os ganchos no canto superior direito, abaixo do menu principal. ( link ). há um exemplo e documentos vinculados a essa página ( link ).
edite: //
Eu tentei esta manhã. Aqui está um exemplo de script php. Ele assume que você já clonou o repositório e o servidor da Web tem todas as permissões necessárias / chaves ssh configuradas.
<?php
$mirrordir='/srv/http/gitlabhooktest/gitmirror';
$gitdir=$mirrordir."/.git";
$json= file_get_contents('php://input');
#error_log($json);
$jsarr=json_decode($json,true);
#error_log(print_r($jsarr,true));
$branch=$jsarr["ref"];
if($branch=='refs/heads/master'){
$cmd="git --work-tree=$mirrordir --git-dir=$gitdir pull";
#error_log($cmd);
exec($cmd);
}