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.