2012-07-03 2 views
1

비트 브킷 계정에 푸시 된 모든 새 분기를 가져 오는 후 수신 후크를 작성하려고합니다. 그런 다음 변경 사항을 적용한 사람이 특정 개발 사이트의 지정된 사용자 인 경우 지점이 자동으로 체크 아웃되어야합니다.송수신 후 수신 후크가 일관성없는 변경 사항을 추가했습니다.

그것은 항상 작동하지 않습니다

$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(); 
     } 
    } 
} 

문제는 이것이다 :

이 코드입니다! 때로는 분기가 체크 아웃되지 않는 경우도 있습니다. 또한 때로는 새로운 분기를 체크 아웃 할 때 파일을 남겨 둡니다. 그 결과 파일이있는 지점에 있지 않은 모든 파일이 수정되었다는 것을 나타내는 결과가 나타납니다.

도와주세요! 아주 고집 센.

감사합니다.

답변

0

git stash는 추적 된 파일의 수정 사항을 저장합니다. 새 파일이 있으면 저장되지 않습니다. 아마도 이것이 당신 문제 중 하나 일 수는 없을까요? 당신은 git merge에 의해 추가 될 새로운 untracked 파일을 가지고 있습니다.

+0

새 파일은 병합을 중단하지 않겠지 만 생각하지 않습니다. 이 프로세스는 말 그대로 스크립트를 통해 중간에 멈추는 것입니다. – Quazz

+0

새 파일은 로컬 저장소에서 추적 할 수없는 경우 동일한 이름의 추적 된 파일을 추가하는 원격 저장소를 병합하려고하면 문제가 될 수 있습니다. 그것은 구걸시 병합을 중단합니다. – Gnujeremie