আমার গিট সংগ্রহস্থলটি এত বড় কেন?


141

145 এম = .গিট / অবজেক্টস / প্যাক /

আমি প্রতিটি স্ক্রিপ্টের ডগা থেকে পিছনের দিকে যাওয়ার আগে প্রতিটি কমিট এবং কমিটের মাপের পার্থক্য যুক্ত করার জন্য একটি স্ক্রিপ্ট লিখেছিলাম। আমি 129 এমবি পেয়েছি, যা শাখা ছাড়াই এবং শাখাগুলির মধ্যে সাধারণ ইতিহাসে একই ফাইলগুলির জন্য অ্যাকাউন্টিং ছাড়াই।

গিট এই সমস্ত জিনিসগুলিকে অ্যাকাউন্টে নেয় তাই আমি আরও অনেক ছোট সংগ্রহস্থল আশা করতে পারি। তাহলে .git এত বড় কেন?

আমি করেছি:

git fsck --full
git gc --prune=today --aggressive
git repack

কতগুলি ফাইল / কমিট সম্পর্কে উত্তর দিতে, আমার প্রতিটিতে 19 টি শাখা রয়েছে প্রায় 40 টি ফাইল। 287 কমিট করে, ব্যবহার করে পাওয়া গেছে:

git log --oneline --all|wc -l

এটি সম্পর্কে তথ্য সঞ্চয় করতে 10 মেগাবাইট গ্রহণ করা উচিত নয়।


5
লিনাস নিম্নলিখিত ওভার আক্রমণাত্মক জিসি সুপারিশ করে। এটি একটি উল্লেখযোগ্য পার্থক্য করতে পারে? গিট রিপ্যাক -এ -ডি --ডেপথ = 250
গ্রেগ বেকন

ধন্যবাদ গ্যাবাকন, তবে কোনও পার্থক্য নেই।
ইয়ান কেলিং

কারণ আপনি -f মিস করছেন। metalinguist.wordpress.com/2007/12/06/...
spuder

git repack -a -dআমার 956MB রেপো 250MB এ সঙ্কুচিত করুন । বিরাট সাফল্য! ধন্যবাদ!
এক্সান্দ্রিয়েল

উত্তর:


68

আমি সম্প্রতি স্থানীয় এক ( git remote add ...এবং git remote update) মধ্যে ভুল দূরবর্তী সংগ্রহস্থল টানছি । অযাচিত রিমোট রেফ, মুছে ফেলার পরে আমার শাখাগুলিতে আমার কাছে এখনও 1.4 গিগাবাইট (!) নষ্ট স্থান ছিল। আমি এটির সাথে ক্লোন করেই এ থেকে মুক্তি পেতে সক্ষম হয়েছি git clone file:///path/to/repository। মনে রাখবেন যে file://স্থানীয় সংগ্রহস্থলটিকে ক্লোন করার সময় পার্থক্য তৈরি করে তোলে - কেবলমাত্র রেফারেন্সযুক্ত বিষয়গুলি পুরো ডিরেক্টরি কাঠামোতে নয়, অনুলিপি করা হয়।

সম্পাদনা করুন: নতুন রেপোতে সমস্ত শাখা পুনরায় তৈরি করার জন্য এখানে আয়ানের একটি লাইনার রয়েছে:

d1=#original repo
d2=#new repo (must already exist)
cd $d1
for b in $(git branch | cut -c 3-)
do
    git checkout $b
    x=$(git rev-parse HEAD)
    cd $d2
    git checkout -b $b $x
    cd $d1
done

1
কি দারুন. ধন্যবাদ. .git = 15M এখন !! ক্লোনিংয়ের পরে, আপনার আগের শাখা সংরক্ষণের জন্য এখানে 1 টি লাইনার দেওয়া হয়েছে। d1 = # মূল রেপো; d2 = # নতুন রেপো; সিডি $ ডি 1; জন্য বি ইন $ (গিট শাখা | কাটা-সি 3-); গিট চেকআউট করুন $ বি; x = $ (গিট রেভ-পার্স হেড); সিডি $ ডি 2; গিট চেকআউট-বি $ বি $ এক্স; সিডি $ ডি 1; সম্পন্ন
ইয়ান কেলিং

আপনি যদি এটি পরীক্ষা করে থাকেন তবে আপনি নিজের উত্তরে 1 টি লাইনার যুক্ত করতে পারেন যাতে এটি কোড হিসাবে ফর্ম্যাট হয়।
ইয়ান কেলিং

1
আমি নির্মোহভাবে আমার রেপোতে একগুচ্ছ ভিডিও ফাইল যুক্ত করেছি এবং --সোফট হেড reset পুনরায় সংশোধন করতে হয়েছিল। .Git / অবজেক্টস dir এর পরে বিশাল ছিল এবং এটি কেবল এটিই আবার নামা যায়। তবে আমি পছন্দ করি না যেভাবে একজন লাইনার আমার শাখার নামগুলি চারপাশে পরিবর্তন করে (এটি কেবল শাখার পরিবর্তে উত্স / শাখা নাম দেখিয়েছে)। তাই আমি আরও এক ধাপ এগিয়ে গিয়ে কিছু স্কেচি সার্জারি চালিয়েছি - আমি .git / অবজেক্ট ডিরেক্টরিটি মূল থেকে মুছে ফেলেছি এবং ক্লোন থেকে একটিতে রেখেছি। এটি কৌশলটি করেছিল, সমস্ত মূল শাখা, রেফ, ইত্যাদি অক্ষত রেখেছিল এবং সমস্ত কিছু কাজ করে বলে মনে হচ্ছে (আঙ্গুলগুলি অতিক্রম করে)।
জ্যাক সেনাচল

1
ফাইল: // ক্লোন সম্পর্কে টিপ দেওয়ার জন্য ধন্যবাদ, এটি আমার জন্য কৌশলটি করেছে
adam.wul

3
@ ভনব্র্যান্ড যদি আপনি কোনও ফাইলের সাথে হার্ড লিঙ্ক করেন এবং মূল ফাইলটি মুছুন, তবে রেফারেন্স কাউন্টারটি 2 থেকে 1 থেকে কমে যাওয়া ব্যতীত আর কিছুই হয় না that কেবলমাত্র যদি সেই কাউন্টারটি 0 এ কম হয়ে যায় তবে fs এর অন্যান্য ফাইলের জন্য স্থান খালি করা হয়। সুতরাং না, ফাইলগুলি যুক্ত থাকলেও আসল মুছে ফেলা গেলে কিছুই ঘটবে না।
স্টিফ্রেইক

157

আমি ব্যবহার করি এমন কিছু স্ক্রিপ্ট:

Git-fatfiles

git rev-list --all --objects | \
    sed -n $(git rev-list --objects --all | \
    cut -f1 -d' ' | \
    git cat-file --batch-check | \
    grep blob | \
    sort -n -k 3 | \
    tail -n40 | \
    while read hash type size; do 
         echo -n "-e s/$hash/$size/p ";
    done) | \
    sort -n -k1
...
89076 images/screenshots/properties.png
103472 images/screenshots/signals.png
9434202 video/parasite-intro.avi

আপনি যদি আরও লাইন চান, তবে পার্শ্ব সংস্করণের প্রতিবেশী উত্তরে দেখুন: https://stackoverflow.com/a/45366030/266720

গিট-ইলোমেনেট (এর জন্য video/parasite.avi):

git filter-branch -f  --index-filter \
    'git rm --force --cached --ignore-unmatch video/parasite-intro.avi' \
     -- --all
rm -Rf .git/refs/original && \
    git reflog expire --expire=now --all && \
    git gc --aggressive && \
    git prune

দ্রষ্টব্য: দ্বিতীয় স্ক্রিপ্টটি পুরোপুরি গিট থেকে তথ্য অপসারণের জন্য ডিজাইন করা হয়েছে (রিফ্লাগগুলি থেকে সমস্ত তথ্য সহ)। সতর্কতার সাথে ব্যবহার করুন.


2
অবশেষে ... হাস্যকরভাবে আমি উত্তরটি আগে আমার অনুসন্ধানে দেখেছিলাম কিন্তু এটি দেখতে খুব জটিল মনে হয়েছিল ... অন্য জিনিস চেষ্টা করার পরে, এইটি বোধ করা শুরু করেছে এবং ভয়েলা!
মিসান্টেলার

@ এমন্সটেলার, git-fatfilesআমি আইআরসি (ফ্রেইনোড / # গিট) এ প্রশ্ন জিজ্ঞাসা করলে প্রাক্তন ( ) স্ক্রিপ্টটি উদ্ভূত হয়েছিল। আমি একটি ফাইলের সেরা সংস্করণটি সংরক্ষণ করেছি, তারপরে এটি এখানে উত্তর হিসাবে পোস্ট করেছি। (যদিও আমি আইআরসি লগগুলিতে মূল লেখককে পারি না)।
vi।

এটি প্রাথমিকভাবে খুব ভাল কাজ করে। তবে আমি যখন রিমোট থেকে আনতে বা আবার টেনে আনি, তখন এটি কেবল সমস্ত বড় ফাইলগুলি সংরক্ষণাগারে রেখে দেয়। আমি কীভাবে এটি প্রতিরোধ করব?
পীর

1
@ ফেল্বো, তারপরে সমস্যাটি সম্ভবত আপনার স্থানীয় সংগ্রহস্থলগুলিতেই নয়, অন্যান্য সংগ্রহস্থলগুলিতেও রয়েছে। হতে পারে আপনার যেকোন জায়গায় প্রক্রিয়াটি করতে হবে, বা সবাইকে মূল শাখা ত্যাগ করতে এবং পুনরায় লিখিত শাখাগুলিতে স্যুইচ করতে বাধ্য করা হবে। বড় দলে এটি সহজ নয় এবং এটি বিকাশকারী এবং / অথবা পরিচালকের হস্তক্ষেপের মধ্যে সহযোগিতা প্রয়োজন। কখনও কখনও কেবল লোডস্টোনটি ভিতরে রেখেই ভাল বিকল্প হতে পারে।
vi।

1
এই ফাংশনটি দুর্দান্ত তবে এটি অভাবনীয়ভাবে ধীর। আমি 40 লাইনের সীমা সরিয়ে দিলে এটি আমার কম্পিউটারেও শেষ করতে পারে না। এফওয়াইআই, আমি এই ফাংশনের আরও দক্ষ সংস্করণ সহ একটি উত্তর যুক্ত করেছি। যদি আপনি এই লজিকটি কোনও বড় সংগ্রহস্থলে ব্যবহার করতে চান তবে আপনি যদি প্রতি ফাইল বা প্রতি ফোল্ডার অনুযায়ী সংক্ষিপ্ত আকারগুলি দেখতে চান তবে এটি পরীক্ষা করে দেখুন।
পিয়োজো

66

git gcইতিমধ্যে একটি কাজ করেছে git repackতাই আপনি যদি এটিতে কিছু বিশেষ বিকল্প দিয়ে যাচ্ছেন না তবে ম্যানুয়ালি পুনঃস্থাপনের কোনও ধারণা নেই।

প্রথম পদক্ষেপটি আপনার বস্তুর ডাটাবেসটির সিংহভাগ স্থান (সাধারণত যেমনটি হবে) কিনা তা দেখা।

git count-objects -v

এটি আপনার সংগ্রহশালায় কতগুলি প্যাকযুক্ত বস্তু রয়েছে, তারা কতটা জায়গা নেয়, আপনার কাছে কতগুলি প্যাক ফাইল রয়েছে এবং তারা কতটা জায়গা নেয় তার একটি প্রতিবেদন দেওয়া উচিত।

আদর্শভাবে, একটি পুনঃস্থাপনের পরে, আপনার কোনও প্যাকবিহীন অবজেক্ট এবং একটি প্যাক ফাইল থাকবে না তবে এমন কিছু অবজেক্ট থাকা স্বাভাবিক যেগুলি বর্তমান শাখাগুলির সাথে সরাসরি উল্লেখ না করে এখনও উপস্থিত এবং আনপ্যাক করা নেই।

আপনার যদি একটি একক বৃহত প্যাক থাকে এবং আপনি স্থানটি কী গ্রহণ করছে তা জানতে চান তবে আপনি কীভাবে সংরক্ষণ করবেন সেগুলি সহ প্যাকটি তৈরি করে এমন বস্তুগুলি তালিকাভুক্ত করতে পারেন।

git verify-pack -v .git/objects/pack/pack-*.idx

নোট যে verify-packএকটি সূচি ফাইল নেয় এবং প্যাক ফাইল নিজেই নয়। এটি প্যাকের প্রতিটি বস্তুর, এর সত্য আকার এবং এটির প্যাকড আকারের পাশাপাশি এটি 'স্বীকৃত' হয়েছে কিনা এবং যদি ডেল্টা শৃঙ্খলার উত্পন্ন হয় তবে তার একটি প্রতিবেদন দেয়।

আপনার সংগ্রহস্থলগুলিতে কোনও অস্বাভাবিক আকারের বড় অবজেক্ট রয়েছে কিনা তা দেখতে আপনি চতুর্থ কলামের (যেমন | sort -k3n) তৃতীয় অংশে আউটপুটকে সংখ্যা অনুসারে বাছাই করতে পারেন ।

এই আউটপুট থেকে আপনি git showকমান্ডটি ব্যবহার করে যে কোনও অবজেক্টের বিষয়বস্তু দেখতে সক্ষম হবেন , যদিও সংগ্রহস্থলের প্রতিশ্রুতিবদ্ধ ইতিহাসে অবজেক্টটি কোথায় রেফারেন্স করা হয়েছে তা ঠিক দেখতে পাওয়া যায় না। আপনার যদি এটি করার দরকার হয় তবে এই প্রশ্ন থেকে কিছু চেষ্টা করুন ।


1
এটি বড় জিনিসগুলি দুর্দান্ত পেয়েছে found গ্রহণযোগ্য উত্তর সেগুলি থেকে মুক্তি পেয়েছে।
ইয়ান কেলিং

2
লিনাস টরভাল্ডস অনুসারে গিট জিসি এবং গিট রিপ্যাকের মধ্যে পার্থক্য। metalinguist.wordpress.com/2007/12/06/...
spuder

31

শুধু এফওয়াইআই, আপনার অবাঞ্ছিত জিনিসগুলি চারপাশে রাখার সবচেয়ে বড় কারণটি হ'ল গিটটি একটি রিফলগ বজায় রাখে।

আপনি যখন দুর্ঘটনাক্রমে আপনার মাস্টার শাখাটি মুছে ফেলেন বা অন্যথায় বিপজ্জনকভাবে আপনার সংগ্রহস্থলটিকে ক্ষতিগ্রস্থ করবেন তখন আপনার বাট সংরক্ষণ করার জন্য এই রিফলগ রয়েছে।

এটির সমাধানের সবচেয়ে সহজ উপায় হ'ল সংকোচনের আগে আপনার রিফলাগুলি কেটে ফেলা (কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি কখনই রিফ্লগের কোনও কমিটিতে ফিরে যেতে চান না))

git gc --prune=now --aggressive
git repack

এটি এর থেকে পৃথক git gc --prune=todayযে এটি পুরো রিফ্লগটি অবিলম্বে মেয়াদ শেষ করে।


1
এই এক এটা আমার জন্য! আমি প্রায় 5 জিবি থেকে 32 এমবিতে গিয়েছিলাম।
হককি

এই উত্তরটি করা সহজ মনে হয়েছিল তবে দুর্ভাগ্যক্রমে আমার পক্ষে কাজ হয়নি। আমার ক্ষেত্রে আমি কেবল ক্লোন করা ভাণ্ডার নিয়ে কাজ করছিলাম। এটাই কি কারণ?
Mert

13

আপনার গিট সংগ্রহস্থলে কোন ফাইলগুলি স্থান গ্রহণ করছে তা যদি আপনি জানতে চান তবে চালান

git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5

তারপরে, সর্বাধিক স্থান (শেষ লাইন) গ্রহণকারী ব্লব রেফারেন্সটি বের করুন এবং এত বেশি জায়গা নিচ্ছে এমন ফাইলের নাম পরীক্ষা করুন

git rev-list --objects --all | grep <reference>

এটি এমনকি এমন একটি ফাইলও হতে পারে যা আপনি মুছে git rmফেলেছিলেন তবে গিট এটি মনে রাখে কারণ এর মধ্যে এখনও উল্লেখ রয়েছে যেমন ট্যাগ, রিমোটস এবং রিফ্লগ।

আপনি একবার কোন ফাইলটি থেকে মুক্তি পেতে চান তা জানার পরে আমি ব্যবহারের পরামর্শ দিই git forget-blob

https://ownyourbits.com/2017/01/18/completely-remove-a-file-from-a-git-repository-with-git-forget-blob/

এটি ব্যবহার করা সহজ, ঠিক করুন

git forget-blob file-to-forget

এটি গিট থেকে প্রতিটি রেফারেন্স সরিয়ে ফেলবে, ইতিহাসের প্রতিটি কমিট থেকে ব্লব সরিয়ে ফেলবে এবং জায়গা খালি করার জন্য আবর্জনা সংগ্রহ চালাবে।


7

ভি এর উত্তর থেকে গিট-ফ্যাটফিলস স্ক্রিপ্টটি যদি আপনি আপনার সমস্ত ব্লকের আকার দেখতে চান তবে এটি দুর্দান্ত, তবে এটি ব্যবহারের অযোগ্য হিসাবে এটি এত ধীর। আমি 40-লাইনের আউটপুট সীমাটি সরিয়ে দিয়েছি এবং এটি শেষ না করে আমার সমস্ত কম্পিউটারের র‌্যাম ব্যবহার করার চেষ্টা করেছে। সুতরাং আমি এটিকে আবার লিখেছি: এটি কয়েক হাজার গুণ দ্রুত, বৈশিষ্ট্যগুলি যুক্ত করেছে (alচ্ছিক), এবং কিছু অদ্ভুত ত্রুটি মুছে ফেলা হয়েছে - পুরানো সংস্করণটি যদি কোনও ফাইলের দ্বারা ব্যবহৃত মোট স্থানের জন্য আউটপুট যোগ করে দেয় তবে তা সঠিক গণনা দেবে।

#!/usr/bin/perl
use warnings;
use strict;
use IPC::Open2;
use v5.14;

# Try to get the "format_bytes" function:
my $canFormat = eval {
    require Number::Bytes::Human;
    Number::Bytes::Human->import('format_bytes');
    1;
};
my $format_bytes;
if ($canFormat) {
    $format_bytes = \&format_bytes;
}
else {
    $format_bytes = sub { return shift; };
}

# parse arguments:
my ($directories, $sum);
{
    my $arg = $ARGV[0] // "";
    if ($arg eq "--sum" || $arg eq "-s") {
        $sum = 1;
    }
    elsif ($arg eq "--directories" || $arg eq "-d") {
        $directories = 1;
        $sum = 1;
    }
    elsif ($arg) {
        print "Usage: $0 [ --sum, -s | --directories, -d ]\n";
        exit 1;
    } 
}

# the format is [hash, file]
my %revList = map { (split(' ', $_))[0 => 1]; } qx(git rev-list --all --objects);
my $pid = open2(my $childOut, my $childIn, "git cat-file --batch-check");

# The format is (hash => size)
my %hashSizes = map {
    print $childIn $_ . "\n";
    my @blobData = split(' ', <$childOut>);
    if ($blobData[1] eq 'blob') {
        # [hash, size]
        $blobData[0] => $blobData[2];
    }
    else {
        ();
    }
} keys %revList;
close($childIn);
waitpid($pid, 0);

# Need to filter because some aren't files--there are useless directories in this list.
# Format is name => size.
my %fileSizes =
    map { exists($hashSizes{$_}) ? ($revList{$_} => $hashSizes{$_}) : () } keys %revList;


my @sortedSizes;
if ($sum) {
    my %fileSizeSums;
    if ($directories) {
        while (my ($name, $size) = each %fileSizes) {
            # strip off the trailing part of the filename:
            $fileSizeSums{$name =~ s|/[^/]*$||r} += $size;
        }
    }
    else {
        while (my ($name, $size) = each %fileSizes) {
            $fileSizeSums{$name} += $size;
        }
    }

    @sortedSizes = map { [$_, $fileSizeSums{$_}] }
        sort { $fileSizeSums{$a} <=> $fileSizeSums{$b} } keys %fileSizeSums;
}
else {
    # Print the space taken by each file/blob, sorted by size
    @sortedSizes = map { [$_, $fileSizes{$_}] }
        sort { $fileSizes{$a} <=> $fileSizes{$b} } keys %fileSizes;

}

for my $fileSize (@sortedSizes) {
    printf "%s\t%s\n", $format_bytes->($fileSize->[1]), $fileSize->[0];
}

এই git-fatfiles.pl নাম দিন এবং এটি চালান। কোনও ফাইলের সমস্ত সংশোধনী দ্বারা ব্যবহৃত ডিস্কের স্থানটি দেখতে --sumবিকল্পটি ব্যবহার করুন । একই জিনিসটি দেখতে, তবে প্রতিটি ডিরেক্টরিতে থাকা ফাইলগুলির জন্য, --directoriesবিকল্পটি ব্যবহার করুন । যদি আপনি সংখ্যা :: বাইটস :: হিউম্যান সিপিএন মডিউল ইনস্টল করেন ("সিপিএন নম্বর :: বাইটস :: মানব" চালান), মাপগুলি বিন্যাস করা হবে: "21M /path/to/file.mp4"।


4

আপনি কি নিশ্চিতভাবেই।। প্যাক ফাইলগুলি গণনা করছেন .আইডিএক্স ফাইলগুলি না? এগুলি। প্যাক ফাইলগুলির মতো একই ডিরেক্টরিতে রয়েছে তবে সংগ্রহস্থলের কোনও ডেটা নেই (যেমন এক্সটেনশানটি সূচিত হয়, তারা সংশ্লিষ্ট প্যাকের সূচীগুলি ছাড়া আর কিছুই নয় - বাস্তবে, আপনি যদি সঠিক কমান্ডটি জানেন তবে আপনি এটি করতে পারেন প্যাক ফাইল থেকে সহজেই এগুলি পুনরায় তৈরি করুন এবং ক্লোনিংয়ের সময় গিট নিজেই এটি সম্পাদন করে, যেমন স্থানীয় গিট প্রোটোকল ব্যবহার করে কেবল একটি প্যাক ফাইল স্থানান্তরিত হয়)।

একটি প্রতিনিধি নমুনা হিসাবে, আমি আমার স্থানীয় লিনাক্স-2.6 সংগ্রহস্থলের ক্লোনটি একবার দেখেছি:

$ du -c *.pack
505888  total

$ du -c *.idx
34300   total

যা প্রায় 7% এর বিস্তৃতি সাধারণ হওয়া উচিত বলে নির্দেশ করে।

বাইরে ফাইলগুলিও রয়েছে objects/; আমার ব্যক্তিগত অভিজ্ঞতায়, তাদের indexএবং gitk.cacheসবচেয়ে বড় বেশী (লিনাক্সের-2.6 সংগ্রহস্থলের আমার ক্লোন মধ্যে 11m মোট) হতে থাকে।


3

সংরক্ষণ করা অন্যান্য গিট বস্তুগুলির .gitমধ্যে গাছ, কমিট এবং ট্যাগ অন্তর্ভুক্ত রয়েছে। কমিটস এবং ট্যাগগুলি ছোট, তবে গাছগুলি বড় আকারের হয়ে উঠতে পারে বিশেষত যদি আপনার ভান্ডারগুলিতে খুব বেশি সংখ্যক ছোট ফাইল থাকে। আপনার কাছে কতগুলি ফাইল এবং কতটি কমিট রয়েছে?


ভাল প্রশ্ন. প্রতিটিতে প্রায় 40 টি ফাইল সহ 19 টি শাখা। গিট কাউন্ট-অবজেক্টস-ভি "ইন-প্যাক: 1570" বলে। ঠিক কী তা বোঝায় না বা আমার কতটা কমিট আছে তা গণনা করতে হবে। আমি কয়েকশো অনুমান করব।
ইয়ান কেলিং

ঠিক আছে, এটি উত্তর মত মনে হয় না। 145 মেগাবাইটের তুলনায় কয়েকশটি তুচ্ছ হবে।
গ্রেগ হিউগিল

2

আপনি কি গিট রিপ্যাক ব্যবহার করার চেষ্টা করেছেন ?


ভাল প্রশ্ন. আমি করেছি, আমিও ছাপ পেয়েছি যে গিট জিসিও তা করে?
ইয়ান কেলিং

এটি গিট গিসির সাহায্যে --আউটো ​​আপনি কী ব্যবহার করেছেন তা সম্পর্কে নিশ্চিত নন।
বাডট্যাক

2

গিট ফিল্টার-শাখা এবং গিট গিসি করার আগে আপনার রেপোতে উপস্থিত ট্যাগগুলি পর্যালোচনা করা উচিত। অবিচ্ছিন্ন ইন্টিগ্রেশন এবং মোতায়েনের মতো জিনিসের জন্য স্বয়ংক্রিয় ট্যাগিংয়ের যে কোনও বাস্তব ব্যবস্থা অযাচিত বিষয়গুলিকে এই ট্যাগগুলি দ্বারা এখনও পুনরায় তৈরি করবে, অতএব জিসি এগুলি তাদের অপসারণ করতে পারে এবং আপনি এখনও ভাবছেন যে রেপোর আকার এখনও এত বড় কেন so

সমস্ত আন-ওয়ান্টেড স্টাফস থেকে মুক্তি পাওয়ার সর্বোত্তম উপায় হ'ল গিট-ফিল্টার এবং গিট গিসি চালানো এবং তারপরে মাস্টারটিকে একটি নতুন বেয়ার রেপোতে চাপানো। নতুন বেয়ার রেপোতে গাছ পরিষ্কার করা হবে।


1

এটি ঘটতে পারে যদি আপনি দুর্ঘটনাক্রমে ফাইলগুলির একটি বড় অংশ যোগ করেন এবং তাদের মঞ্চায়িত করেন, অগত্যা তাদের প্রতিশ্রুতিবদ্ধ না করে। এই মধ্যে ঘটতে পারে railsযখন আপনি চালাতে অ্যাপ্লিকেশন bundle install --deploymentএবং তারপর ঘটনাক্রমে git add .তারপর আপনি দেখতে সব ফাইল যোগ অধীনে vendor/bundleআপনি তাদের unstage কিন্তু তারা ইতিমধ্যে Git ইতিহাস পেয়েছিলাম, তাই আপনি আবেদন করতে হবে Vi এর উত্তর এবং পরিবর্তন video/parasite-intro.aviদ্বারা vendor/bundleতারপর দ্বিতীয় কমান্ড তিনি প্রদান করে চালানো।

git count-objects -vস্ক্রিপ্ট প্রয়োগের আগে আমার ক্ষেত্রে যে পার্থক্যটি তা দেখতে পাচ্ছেন : 52K এর এবং এর প্রয়োগের পরে এটি 3.8K ছিল।


1

এটি স্ট্যাকট্রেস.লগ পরীক্ষা করার মতো worth এটি মূলত ট্রেড কমিটস ট্রেস করার জন্য একটি ত্রুটি লগ। আমি সম্প্রতি জানতে পেরেছি যে আমার স্ট্যাকট্র্যাস.লগটি 65.5 গিগাবাইট এবং আমার অ্যাপ্লিকেশনটি 66.7 জিবি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.