Redmine - рдЙрддреНрдкрд╛рджрди рдЕрджреНрдпрддрди рдирд┐рдпрдВрддреНрд░рдг

рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдХреНрд╕рд░ 2 рдкреНрд░рд╢реНрди рд╣реЛрддреЗ рд╣реИрдВ:
1. рдХреНрдпрд╛ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╣реА рд╣рд▓ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпреБрджреНрдз рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ - рдЧрд┐рдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдореБрдХрд╛рдмрд▓рд╛ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛
2. рд▓реЙрдЧ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХреИрд╕реЗ рджреЗрдЦреЗрдВ - рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрдпрд╛ рдФрд░ рдХрдм рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ, рдЧрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред Redmine рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВред
рд░реЗрдбрдорд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рдЙрд╕рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╣реЗрдЯреНрдЬрд╝рдирд░ рд╕реЗ рд╕рдмрд╕реЗ рд╕рд╕реНрддрд╛ рд╡реАрдкреАрдПрд╕ рд▓рд┐рдпрд╛, рдФрд░ рд╣рдорд╛рд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рд░реЗрдбрдореАрди рд╕реЗ рдЬреЛрдбрд╝рд╛ред рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рдХрд▓рд╛ рдЬрдм " re #111 " рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз re #111 рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛ 111 рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИред рддрджрдиреБрд╕рд╛рд░, " fix #111 " рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред рдареАрдХ рд╣реИ, рд╕рдВрд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдиреНрд╕, рджреЗрдЦрдиреЗ рдореЗрдВ рдХрдорд┐рдЯреНрд╕ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╣реЛрддрд╛ рд╣реИ, рдЖрджрд┐ред рдореБрдЦреНрдп "рдорд╛рд╕реНрдЯрд░" рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╣рдорд╛рд░реЗ рдЧрд┐рдердм рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЗрд╕рд▓рд┐рдП, рдКрдкрд░ рджрд┐рдП рдЧрдП рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЖрд╕рд╛рдиреА рд╕реЗ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
1ред
 git config --global alias.incoming '!git remote update -p; git log ..@{u}' 

рдФрд░ рдЖрдЧреЗ git incoming рдХрдорд╛рдВрдб рдкрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╛рдврд╝ рдЖ рдЬрд╛рдПрдЧреАред рдпрд╣рд╛рдБ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг ( рдХреНрдпреВ рдФрд░ рдХреНрдпреВ рдореЗрдВ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ)
2ред
 git reflog 

рдФрд░
 git log HEAD@{1}..HEAD@{0} 


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ # 111 рдХреНрдпрд╛ рдХрд╛рд░реНрдп рд╣реИ, рдЬреЛ рд▓реЙрдЧ рдореЗрдВ рдлреНрд▓реИрд╢ рдХрд░реЗрдЧрд╛ред
рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП redmine рдореЗрдВ, рдПрдХ рдирдпрд╛ рддрд╛рд░реНрдХрд┐рдХ рдлрд╝реАрд▓реНрдб рдЙрддреНрдкрд╛рджрди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рд╣рд╛рдБ - рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛, рдирд╣реАрдВ - рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реЛрдмреЛрдЯ рдХреЛ рд░реЗрдбрдорд╛рдЗрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рд╣реБрдХ post-merge ред рдпрд╣ рд╣реБрдХ рдмрд┐рд▓реНрдХреБрд▓ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рддреЛ Production=true рдореЗрдВ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ Production=true redmine, рдФрд░ рдЕрдВрдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЕрдВрддрд┐рдо рд╕реВрдЪреА рдмрдирд╛рддрд╛ рд╣реИ, рд░реЛрдмреЛрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рддрд╛ рд╣реИ ("рд╣рд▓" рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде) рдФрд░ рд╡рд╣рд╛рдВ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рд╣реБрдХ рдХреЗ рдмрд╛рдж рд╕реЗ php рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рд░реВрдмреА рд░реЗрд╕реНрдЯ рдПрдкреАрдЖрдИ рдкрд░ рд░реВрдмреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ ActiveResource.php рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдорд┐рд▓реАред
рдореИрдВ рдкреВрд░рд╛ рдХреЛрдб рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдереЛрдбрд╝рд╛ рд╣реИ:
 #!/usr/bin/php <?php require_once ('ActiveResource.php'); //      .         User  . class Issue extends ActiveResource { var $site = 'http://redmine.site.com/'; var $request_format = 'xml'; var $extra_params = '?key=API_KEY'; } $issue = new Issue(); // ,    . exec('git log --pretty="%h=!=%an=!=%s" HEAD@{1}..HEAD@{0}',$logs); //  ,     $s = ""; //    foreach($logs as $log){ //  ,  ,    list($hash, $name, $comment) = explode("=!=", $log); //      echo $hash . " " . $name . " " . $comment . "\n"; // # -     . $s .= "# "; //         if(preg_match("/#\d+/", $comment, $ids)){ $id = substr($ids[0],1); $issue->find($id); //    Production  true.     ID.     2. $issue->set("custom_fields", array("@type"=>"array", array("custom_field"=>array("@id"=>"2", "value"=>1)))); $issue->save(); //     " "   .         alt   .      - . $s .= "+ " . $ids[0] . "+ "; } // ..       -    .      . $s .= "commit:" . $hash; //     $s .= " *".$name."*"; //     ,    ,    2       $comment = trim(preg_replace("/^.*#\d+/", "", $comment)); if(!empty($comment)){ $s .= ", _" . $comment . "_"; } $s .= "\n"; } //   . $newIssue = new Issue(array ('subject' => ' Production', 'project_id' => '2')); //  $newIssue->set("description", $s); //  $newIssue->set("status_id",3); //    $newIssue->set("assigned_to_id",12); $newIssue->save(); 

рдЕрдВрддрд┐рдо рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


рдЖрдЦрд┐рд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИред
рд░реЗрдбрдорд┐рди рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдХрд╛рд░реНрдп рд╣рд▓ рдХрд┐рдП рдЧрдП рд╣реИрдВ рд▓реЗрдХрд┐рди рдмрд╛рдврд╝ рдирд╣реАрдВред рдЖрдк рдпрд╣ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдХрдм рдФрд░ рдХреНрдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХред

рд╡реИрд╕реЗ, рдЕрдкрдиреЗ рдЖрдк рдХреЛ .bashrc рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
 alias gl='git log --pretty="%Cgreen%h %Cblue%an%Creset %s %Cred%ar"' 

рдФрд░ git log рдмрдЬрд╛рдп gl рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

Source: https://habr.com/ru/post/In147877/


All Articles