gpt4 book ai didi

git - 在 git repo 中查找超过 x 兆字节的文件,这些文件在 HEAD 中不存在

转载 作者:IT王子 更新时间:2023-10-29 00:41:02 25 4
gpt4 key购买 nike

我有一个 Git 存储库,我在其中存储随机的东西。主要是随机脚本、文本文件、我设计的网站等等。

随着时间的推移,我删除了一些大型二进制文件(通常为 1-5MB),这些文件会增加存储库的大小,而我在修订历史记录中不需要这些文件。

基本上我希望能够做到..

me@host:~$ [magic command or script]
aad29819a908cc1c05c3b1102862746ba29bafc0 : example/blah.psd : 3.8MB : 130 days old
6e73ca29c379b71b4ff8c6b6a5df9c7f0f1f5627 : another/big.file : 1.12MB : 214 days old

..然后能够遍历每个结果,检查它是否不再需要然后将其删除(可能使用 filter-branch)

最佳答案

这是对 the git-find-blob script I posted previously 的改编:

#!/usr/bin/perl
use 5.008;
use strict;
use Memoize;

sub usage { die "usage: git-large-blob <size[b|k|m]> [<git-log arguments ...>]\n" }

@ARGV or usage();
my ( $max_size, $unit ) = ( shift =~ /^(\d+)([bkm]?)\z/ ) ? ( $1, $2 ) : usage();

my $exp = 10 * ( $unit eq 'b' ? 0 : $unit eq 'k' ? 1 : 2 );
my $cutoff = $max_size * 2**$exp;

sub walk_tree {
my ( $tree, @path ) = @_;
my @subtree;
my @r;

{
open my $ls_tree, '-|', git => 'ls-tree' => -l => $tree
or die "Couldn't open pipe to git-ls-tree: $!\n";

while ( <$ls_tree> ) {
my ( $type, $sha1, $size, $name ) = /\A[0-7]{6} (\S+) (\S+) +(\S+)\t(.*)/;
if ( $type eq 'tree' ) {
push @subtree, [ $sha1, $name ];
}
elsif ( $type eq 'blob' and $size >= $cutoff ) {
push @r, [ $size, @path, $name ];
}
}
}

push @r, walk_tree( $_->[0], @path, $_->[1] )
for @subtree;

return @r;
}

memoize 'walk_tree';

open my $log, '-|', git => log => @ARGV, '--pretty=format:%T %h %cr'
or die "Couldn't open pipe to git-log: $!\n";

my %seen;
while ( <$log> ) {
chomp;
my ( $tree, $commit, $age ) = split " ", $_, 3;
my $is_header_printed;
for ( walk_tree( $tree ) ) {
my ( $size, @path ) = @$_;
my $path = join '/', @path;
next if $seen{ $path }++;
print "$commit $age\n" if not $is_header_printed++;
print "\t$size\t$path\n";
}
}

关于git - 在 git repo 中查找超过 x 兆字节的文件,这些文件在 HEAD 中不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/298314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com