bitbucket アカウントにプッシュされたすべての新しいブランチをプルする post-receive フックを作成しようとしています。次に、それらの変更をプッシュした人が特定の開発サイトの指定ユーザーである場合、ブランチは自動的にチェックアウトされます。
これはコードです:
$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 は、そのブランチ内にない多数のファイルが変更されたと報告します。
助けてください!非常に立ち往生。
ありがとう