gitリポジトリのローカルコピーで日付の後にコミットされたコミットを取得し、ファイルの関連する変更を抽出しようとします。頑丈なコミットに適切な差分/パッチを選択する方法
私はgitのコマンドにこれを比較したい場合、それは次のようになります。ここでは
git log -p --reverse --after="2016-10-01"
は、私が使用するスクリプトです:
require "rugged"
require "date"
git_dir = "../ruby-gnome2/"
repo = Rugged::Repository.new(git_dir)
walker = Rugged::Walker.new(repo)
walker.sorting(Rugged::SORT_DATE| Rugged::SORT_REVERSE)
walker.push(repo.head.target)
walker.each do |commit|
c_time = Time.at(commit.time)
next unless c_time >= Date.new(2016,10,01).to_time
puts c_time
puts commit.diff.size
puts commit.diff.stat.inspect
end
問題は、それはたくさんのように見えるということですここでファイルの変更はこのスクリプトの出力の終わりです:
2016-10-22 17:33:37 +0200
2463
[2463, 0, 271332]
つまり、2463のfi変更された/削除された/置き換えられたファイル。 git log -p --reverse --after="2016-10-22"
は、2つのファイルのみが変更されていることを示しています。
gitコマンドと同じ結果を得るにはどうすればよいですか?つまり、このコミットによって変更された実際のファイルを見つけるにはどうすればよいですか?
は残念ながら、違いはありません。
今、私はデフとのgitコマンド・ライン・インターフェースに対応したログを見つけることができます-gnome2 /コミット/マスター、これは私のテストに使用するレポです。 「2016-10-22」の日付以降に2463のファイルが変更/削除/置換されていないことが簡単に分かります。 – cedlemo
@cedlemo:はい、 'git log --name-status --online --after =" 2016-10-22 "は3つのファイルしか表示しません。つまり、スクリプトに問題があることを意味します。その日の前にコミット*をカウントしているからですか?結局、 'git log --name-status --oneline --before =" 2016-10-22 "--all --branches | grep -e"^M "| sort | uniq | wc'は3362個のファイルを与えます。 '' c_time> = Date.new(2016,10,01).to_time'が疑わしいのであれば... – VonC
'' c_time> = Date.new(2016,10,01)私は、最後のコミットが偽である2463個のファイルが変更されていることを意味する、コミットに対するループの最後の繰り返しです。スクリプトには問題があるかもしれませんが、どこには表示されません。 – cedlemo