<% my $user = param('user'); my $project = param('project'); my $branch = param('rev1'); my $rev2_abs = param('rev2_abs'); my ($remote_user, $remote_project, $remote_branch) = split /\//, $rev2_abs, 3; my $commits = app->git->get_commits(app->rep_info($user, $project), $branch, 100); my $remote_commits = app->git->get_commits( app->rep_info($remote_user, $remote_project), $remote_branch, 100 ); my $merged_commits_h = {}; for my $commit (@$commits) { my $id = $commit->{id}; $merged_commits_h->{$id} ||= {}; $merged_commits_h->{$id}{age} = $commit->{age}; $merged_commits_h->{$id}{age_string_date_local} = $commit->{age_string_date_local}; $merged_commits_h->{$id}{title} = $commit->{title}; $merged_commits_h->{$id}{type} = 'local'; } for my $commit (@$remote_commits) { my $id = $commit->{id}; if ($merged_commits_h->{$id}) { $merged_commits_h->{$id}{type} = 'same'; } else { $merged_commits_h->{$id} ||= {}; $merged_commits_h->{$id}{age} = $commit->{age}; $merged_commits_h->{$id}{age_string_date_local} = $commit->{age_string_date_local}; $merged_commits_h->{$id}{title} = $commit->{title}; $merged_commits_h->{$id}{type} = 'remote'; } } my $merged_commits = []; for my $id ( sort { $merged_commits_h->{$b}{age} <=> $merged_commits_h->{$a}{age}} keys %$merged_commits_h) { my $commit = {%{$merged_commits_h->{$id}}}; $commit->{id} = $id; push @$merged_commits, $commit; } layout 'common', title => "Network Graph $user/$project/$branch...$rev2_abs"; %> %= include 'include/header'; %= javascript begin $('document').ready(function () { // Scroll to right $('#graph').scrollLeft(1000); }); % end

Graph

Compare 100 commits.
<%= "$user / $project / $branch" %>
% for my $type (qw/local same remote/) { % for (my $i = 0; $i < @$merged_commits; $i++) { % my $commit = $merged_commits->[$i]; % my $color % = $type eq 'local' ? 'blue' % : $type eq 'same' ? 'gray' % : 'green'; % if ($commit->{type} eq $type) { % } else { % } % } % }
{id}") %>" title="<%= "$commit->{title}($commit->{age_string_date_local})" %>">● -
<%= "$remote_user / $remote_project / $remote_branch" %>

Merging via command line

you can perform a manual merge on the command line.
Step 1: If you don't add user remote repository, add it.
git remote add <%= $remote_user %> <%= url_for("/$remote_user/$remote_project.git")->to_abs %>
      
Step 2: From your project repository, bring in the changes and test.
git remote update
git fetch
git checkout -b <%= "$remote_user-$remote_branch" %> <%= "$remote_user/$remote_branch" %>
git merge <%= $branch %>
      
Step 3: Merge the changes and update on GitHub.
git checkout <%= $branch %>
git merge <%= "$remote_user-$remote_branch" %>
git push origin <%= $branch %>
      
%= include '/include/footer';