ある日付のcommitのIDだけ抜き出す
git-id-date.rb
#!/usr/bin/env ruby require 'date' if ARGV.size < 1 STDERR.puts "ruby #{$0} 2011-08-15" STDERR.puts "ruby #{$0} 2011-08-15 2011-09-30" exit 1 end date_start = Date.parse(ARGV.shift) date_end = ARGV.empty? ? Date.today : Date.parse(ARGV.shift) lines = `git log`.split(/[\r\n]/) id = nil date = nil lines.each do |line| if line =~ /^commit\s[a-zA-Z0-9]+$/ id = line.split(/\s/)[1] elsif line =~ /^Date:\s/ date = Date.parse line.scan(/^Date:\s+(.+)$/).first.first puts id if date_start <= date and date <= date_end id = nil date = nil end end
gitリポジトリ内で、
ruby git-id-date.rb 20110815 20110830
とかすると8/15〜8/30の間のcommit idがでてくる。
ある期間のcommit logを全てファイルに書き出す
mkdir -p ~/tmp/gitdiff git-id-date.rb 20110815 20110830 | ruby -lane 'puts cmd="git show #{$_} | > ~/tmp/gitdiff/#{$_}";system cmd'