Git Post-Receive Hook непоследовательно добавляет изменения

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

Это код:

$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 говорит, что была изменена целая куча файлов, которые не были в той ветке, в которой они находятся.

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

Спасибо

1 ответ

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

Другие вопросы по тегам