From 3983d456960f9e64cbd4803a7d82c2f8ffd07cb4 Mon Sep 17 00:00:00 2001 From: Sami Samhuri Date: Tue, 12 Mar 2013 22:25:09 -0700 Subject: [PATCH] add a script to find large files in git repos --- git-large-files | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100755 git-large-files diff --git a/git-large-files b/git-large-files new file mode 100755 index 0000000..4aaecd6 --- /dev/null +++ b/git-large-files @@ -0,0 +1,23 @@ +#!/usr/bin/env ruby -w +head, treshold = ARGV +head ||= 'HEAD' +Megabyte = 1000 ** 2 +treshold = (treshold || 0.1).to_f * Megabyte + +big_files = {} + +IO.popen("git rev-list #{head}", 'r') do |rev_list| + rev_list.each_line do |commit| + commit.chomp! + for object in `git ls-tree -zrl #{commit}`.split("\0") + bits, type, sha, size, path = object.split(/\s+/, 5) + size = size.to_i + big_files[sha] = [path, size, commit] if size >= treshold + end + end +end + +big_files.each do |sha, (path, size, commit)| + where = `git show -s #{commit} --format='%h: %cr'`.chomp + puts "%4.1fM\t%s\t(%s)" % [size.to_f / Megabyte, path, where] +end