Git 로그를 고려해보세요:
commit 4d6b30238fbfc972ea4505cadf43abd316506d9e
Author: Dotan Cohen <[email protected]>
Date: Mon Jan 11 22:41:21 2016 +0200
Final foobar version
commit 4d6b30238fbfc972ea4505cadf43abd316506d9e
Author: Dotan Cohen <[email protected]>
Date: Mon Jan 11 19:11:51 2016 +0200
Working foobars
commit 4d6b30238fbfc972ea4505cadf43abd316506d9e
Author: Dotan Cohen <[email protected]>
Date: Mon Jan 11 10:31:37 2016 +0200
Broken foobars
commit 4d6b30238fbfc972ea4505cadf43abd316506d9e
Author: Dotan Cohen <[email protected]>
Date: Mon Jan 10 21:47:22 2016 +0200
Added foobars
commit 4d6b30238fbfc972ea4505cadf43abd316506d9e
Author: Dotan Cohen <[email protected]>
Date: Mon Jan 10 11:54:12 2016 +0200
Preparation for foobars
매일 각 커밋 메시지의 첫 번째 시간과 마지막 시간을 얻은 다음 계산을 수행하고 소요된 총 시간을 추정하려면 어떻게 해야 합니까?이 같은:
Date: Mon Jan 11 22:41:21 2016 +0200
Date: Mon Jan 11 10:31:37 2016 +0200
TOTAL A: 12:09:44
Date: Mon Jan 10 21:47:22 2016 +0200
Date: Mon Jan 10 11:54:12 2016 +0200
TOTAL B: 09:53:10
TOTAL: 22:02:54
이 질문의 목적에 따라 모든 커밋은 동일한 사람이 수행한다고 가정할 수 있습니다. 하루에 커밋할 수 있는 수에는 제한이 없으며, 다양한 월 또는 연도 경계에 걸쳐 있는 날짜 수에는 제한이 없습니다.
답변1
다음 Perl 코드는 내가 생각하는 당신이 원하는 것에 매우 가깝습니다. Perl을 처음 사용하는 경우 DateTime::Format::Strptime
CPAN에서 이 모듈을 설치 해야 합니다 cpan install DateTime::Format::Strptime
....
그런 다음 git log를 파일로 출력합니다 git log > git.log
.
그 후, 다음 코드를 파일에 붙여넣고 로그 파일을 동일한 디렉터리에 배치한 후 실행합니다.
이것은 내 코드가 가장 예쁘거나 효율적인 코드는 아니지만 뭔가를 조합하는 데 몇 분 밖에 걸리지 않았습니다.
#!/usr/bin/perl
use warnings;
use strict;
use DateTime::Format::Strptime;
my $log = 'git.log';
open my $fh, '<', $log or die $!;
my %dates;
my @order;
while (<$fh>){
if (/Date:\s+(.*?)(\d{2}:.*)/){
push @order, $1 if ! $dates{$1};
push @{ $dates{$1} }, "$1$2";
}
}
my $letter = 'A';
my $total_time = DateTime::Duration->new;
for my $day (@order){
my $start = $dates{$day}->[0];
my $end = $dates{$day}->[-1];
my $parser = DateTime::Format::Strptime->new(
pattern => '%a %b %d %H:%M:%S %Y %z',
on_error => 'croak',
);
my $dt1 = $parser->parse_datetime($start);
my $dt2 = $parser->parse_datetime($end);
my $total = $dt1 - $dt2;
$total_time = $total_time + $total;
print "$start\n$end\n";
print "Total $letter:\t";
print join ':', ($total->hours, $total->minutes, $total->seconds);
print "\n\n";
$letter++;
}
print "Total time overall: ";
print join ':', ($total_time->hours, $total_time->minutes, $total_time->seconds);
print "\n";