2012-07-03 1 views
1

Я пытаюсь написать крюк после приема, который потянет все новые ветви, нажатые на учетную запись bitbucket. Затем, если человек, который нажал эти изменения, является назначенным пользователем определенного сайта разработки, ветвь должна автоматически быть проверена.Git Post-Receive Hook несовместимо добавляет изменения

Это код:

$payload = stripslashes(($_POST['payload']) ? $_POST['payload'] : $_GET['payload']); 
$obj = json_decode($payload); 

$commits = $obj->commits; 
$head_commit = $commits[0]; 

for ($i=0; $i<sizeof($commits); $i++) { 
    $commit = $commits[$i]; 
    $head_date = strtotime($head_commit->timestamp); 
    $comm_date = strtotime($commit->timestamp); 

    if ($comm_date > $head_date) { 
     $head_commit = $commit; 
    } 
} 

$branch = $head_commit->branch; 
$author = $head_commit->raw_author; 

$msgs = array();         
$ini = parse_ini_file('pull_settings.ini',true); 
define ("CURRENT_SITE",$_SERVER["SERVER_NAME"]); 

foreach ($ini as $server) { 
    if (CURRENT_SITE==$server["site_name"]) { 
     if ($server["type"]=="master") { 
      $users = $server["users"]; 
      if (in_array($author,$users) && $branch == "master") { 
       exec("git pull",$msgs); 
      } else $users = array(); 
     } 
     if ($server["type"]=="dev") { 
      exec("git stash",$msgs); 
      exec("git fetch --all",$msgs); 
      $users = $server["users"]; 
      if (in_array($author,$users)) { 
       exec("git checkout -f $branch",$msgs); 
       exec("git merge origin/$branch",$msgs); 
      } else $users = array(); 
     } 
    } 
} 

Проблема заключается в следующем:

Это не всегда работает! Иногда он не проверяет ветку, даже если это необходимо. Кроме того, иногда он оставляет файлы позади, когда он проверяет новые ветви. Это приводит к тому, что git говорит, что была изменена целая куча файлов, которые не были в пределах ветки, в которой она находится.

Пожалуйста, помогите! Очень застрял.

Благодаря

ответ

0

мерзавец копить сохранит изменения, сделанные из отслеживаемых файлов. Если у вас есть новые файлы, они не будут сохранены. Разве это не может быть одной из ваших проблем? У вас есть новые файлы без следа, которые затем будут добавлены вашим слиянием git.

+0

новых файлов не остановит слияние, хотя я не думаю? процесс буквально останавливается в середине сценария – Quazz

+0

Новые файлы могут быть проблемой, если они не отслеживаются в локальном репо, и вы пытаетесь объединить удаленное репо, добавляя отслеживаемые файлы с тем же именем. Это остановило бы слияние при попрошайничестве. – Gnujeremie