git rev-parse –short HEAD no recibe el último commit

Hola, estoy usando un enlace como este:

<?php file_put_contents('deploy.log', serialize($_POST['payload']), FILE_APPEND); $repo_dir = '/home/admin/web/website/repo-fullstack.git'; $web_root_dir = '/home/admin/web/website/public_html'; // Full path to git binary is requinetworking if git is not in your PHP user's path. Otherwise just use 'git'. $git_bin_path = 'git'; $update = false; // Parse data from Bitbucket hook payload $payload = json_decode($_POST['payload']); if (empty($payload->commits)){ // When merging and pushing to bitbucket, the commits array will be empty. // In this case there is no way to know what branch was pushed to, so we will do an update. $update = true; } else { foreach ($payload->commits as $commit) { $branch = $commit->branch; if ($branch === 'production' || isset($commit->branches) && in_array('production', $commit->branches)) { $update = true; break; } } } if ($update) { // Do a git checkout to the web root exec('cd ' . $repo_dir . ' && ' . $git_bin_path . ' fetch'); exec('cd ' . $repo_dir . ' && GIT_WORK_TREE=' . $web_root_dir . ' ' . $git_bin_path . ' checkout -f'); // Log the deployment $commit_hash = shell_exec('cd ' . $repo_dir . ' && ' . $git_bin_path . ' rev-parse --short HEAD'); file_put_contents('deploy.log', date('m/d/Y h:i:s a') . " Deployed branch: " . $branch . " Commit: " . $commit_hash . "\n", FILE_APPEND); } ?> 

El problema es que POST HOOK obtiene una confirmación anterior y no recibe la última confirmación. Me di count de que incluso como usuario ROOT. Ejecuto el command git rev-parse –short HEAD también recibe el antiguo commit. Entonces definitivamente no es un problema de permissions.

¿Alguna razón por la cual este command no funciona? Simplemente no entiendo por qué se vuelve viejo.

EDITAR: El problema más extraño si todo lo que se preguntan es, se obtiene la descripción correcta para el POST HOOK. Simplemente no es el compromiso correcto. ¿QUE ES ESTO?

Hay varios problemas en este script:

 $branch = $commit->branch; 

Reemplácelo con

 $branch = $payload->repository->default_branch 

Hace una búsqueda de git, pero necesitas un git pull, así que agrega esto después de la búsqueda

 exec('cd ' . $repo_dir . ' && ' . $git_bin_path . ' pull'); 

También tuve problemas con los files que se eliminaron del repository, aún estando presente. Para solucionarlo, agregue un git clean después de la descarga de git de la siguiente manera:

 exec('GIT_WORK_TREE=' . $web_root_dir . ' ' . $git_bin_path . ' clean -fdx'); 

Todo se ve así y también he agregado una buena function de correo:

 <?php $repo_dir = '/srv/users/YOURUSER/gitrepo/APPLICATIONAME'; $web_root_dir = '/srv/users/YOURUSER/apps/APPLICATIONAME/public'; // Full path to git binary is requinetworking if git is not in your PHP user's path. Otherwise just use 'git'. $git_bin_path = 'git'; // Parse data from Github hook payload $payload = json_decode($_POST['payload']); $empty = false; $update = false; if (empty($payload->commits)){ // When merging and pushing to bitbucket, the commits array will be empty. // In this case there is no way to know what branch was pushed to, so we will do an update. $empty = true; $update = true; } else { $branch = $payload->repository->default_branch; $message = $payload->head_commit->message; if ($branch === 'master' ) { $update = true; } } if ($update) { // Do a git checkout to the web root exec('cd ' . $repo_dir . ' && ' . $git_bin_path . ' fetch'); exec('cd ' . $repo_dir . ' && ' . $git_bin_path . ' pull'); exec('cd ' . $repo_dir . ' && GIT_WORK_TREE=' . $web_root_dir . ' ' . $git_bin_path . ' checkout -f'); exec('cd ' . $repo_dir . ' && GIT_WORK_TREE=' . $web_root_dir . ' ' . $git_bin_path . ' clean -fdx'); // Log the deployment $commit_hash = shell_exec('cd ' . $repo_dir . ' && ' . $git_bin_path . ' rev-parse --short HEAD'); file_put_contents('.deploy.log', date('Ymd H:i:s') . " Github -- " . $message . " HASH: " . $commit_hash . "\n", FILE_APPEND); // prepare and send the notification email $headers = "From: github@YOURDOMAIN.COM\r\n"; $headers .= 'CC: ' . $payload->pusher->email . "\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; // send mail to someone, and the github user who pushed the commit $body = '<p>The Github user <a href="https://github.com/' . $payload->pusher->name .'">@' . $payload->pusher->name . '</a>' . ' has pushed to <b>' . $payload->repository->url . '</b></p>'; $body .= '<p>Here\'sa brief list of what has been changed:</p>'; $body .= '<ul>'; foreach ($payload->commits as $commit) { $body .= '<li>'.$commit->message.'<br />'; $body .= '<small style="color:#e67e22 ">Modified: </small><b>'.count($commit->modified) .'</b> &nbsp; <small style="color:#58d68d ">Added: </small><b>'.count($commit->added) .'</b> &nbsp; <small style="color:#e74c3c">Removed: </small><b>'.count($commit->removed) .'</b> &nbsp; <a href="' . $commit->url . '">Compare here</a></li>'; } $body .= '</ul>'; $body .= '</pre>'; $body .= '<p>Thanks for contributing, <br/>Github Webhook Endpoint'; $body .= ' @ '.$_SERVER['REMOTE_ADDR'].'</p>'; mail('REPOADMIN@YOURDOMAIN.COM', 'Deployed to YOURAPPLICATION', $body, $headers); echo(date('Ymd H:i:s')); echo(" \r\n$message deployed"); } else { header('HTTP/1.1 500 Internal Server Error'); } ?>