git gc--aggressive বনাম গিট repack




github version-control (4)

আমি git সংগ্রহস্থলের আকার হ্রাস করার উপায়গুলি খুঁজছি। অনুসন্ধান বেশিরভাগ সময় আমাকে git gc --aggressive দিকে নিয়ে যায়। আমি আরও পড়েছি যে এটি পছন্দসই পদ্ধতি নয়।

কেন? আমি যদি gc --aggressive চালাচ্ছি তবে আমার কী সচেতন হওয়া উচিত?

git repack -a -d --depth=250 --window=250 কে gc --aggressive চেয়ে বেশি gc --aggressive । কেন? কীভাবে পুনরায় সংগ্রহস্থলের আকার হ্রাস করতে পারে? এছাড়াও - আমি পতাকা - --depth এবং - --window সম্পর্কে পুরোপুরি পরিষ্কার --window

gc এবং gc মধ্যে আমার কী নির্বাচন করা উচিত? আমি কখন gc এবং gc ব্যবহার gc ?


আমার কখন জিসি ও পুনরায় ব্যবহার করা উচিত?

আমি যেমন " গিট আবর্জনা সংগ্রহ পুরোপুরি কাজ করে বলে মনে হচ্ছে না " তে উল্লেখ করেছি, git gc --aggressive নিজেই পর্যাপ্ত বা এমনকি যথেষ্ট নয়।
এবং, আমি নীচে ব্যাখ্যা হিসাবে, প্রায়শই প্রয়োজন হয় না।

সবচেয়ে কার্যকর সংমিশ্রণটি git repack , তবে git prune :

git gc
git repack -Ad      # kills in-pack garbage
git prune           # kills loose garbage

দ্রষ্টব্য: গিট 2.11 (Q4 2016) ডিফল্ট gc aggressive গভীরতা 50 এ সেট করবে

জেফ কিং ( peff ) দ্বারা কমিট 07e7dbf (11 আগস্ট 2016 ) দেখুন
( জুনিও সি হামানো দ্বারা মার্জ - gitster - প্রতিশ্রুতি 0952ca8 , 21 সেপ্টেম্বর 2016)

gc : ডিফল্ট আক্রমণাত্মক গভীরতা 50

" git gc --aggressive " ডেল্টা-চেইনের দৈর্ঘ্য ২৫০-এ সীমাবদ্ধ করতে ব্যবহৃত হয়েছিল, যা অতিরিক্ত স্থান সঞ্চয় অর্জনের পক্ষে খুব গভীর এবং রানটাইম পারফরম্যান্সের জন্য ক্ষতিকারক।
সীমা হ্রাস করা হয়েছে 50।

সংক্ষিপ্তসারটি হ'ল: বর্তমান 250 ডিফল্ট খুব বেশি স্থান সঞ্চয় করে না এবং এর জন্য সিপিইউ খরচ হয়। এটি একটি ভাল বাণিজ্য।

git-gc " --aggressive " পতাকাটি তিনটি কাজ করে:

  1. বিদ্যমান ডেল্টা ফেলে দিতে এবং স্ক্র্যাচ থেকে পুনরুদ্ধার করতে " -f " ব্যবহার করুন
  2. ডেল্টাসের জন্য আরও শক্ত দেখতে "--window = 250" ব্যবহার করুন
  3. দীর্ঘ ডেল্টা চেইন তৈরি করতে "--depth = 250" ব্যবহার করুন

আইটেমগুলি (1) এবং (2) একটি "আক্রমণাত্মক" প্রতিশোধের জন্য ভাল মিল matches
তারা আরও ভাল প্যাক পাওয়ার প্রত্যাশায় আরও গণনার কাজ করতে অনুরোধ করে। আপনি পুনঃস্থাপনের সময় ব্যয়গুলি প্রদান করুন এবং অন্যান্য ক্রিয়াকলাপগুলি কেবলমাত্র সুবিধাটি দেখবে।

আইটেম (3) এত পরিষ্কার নয়।
দীর্ঘ শৃঙ্খলার অনুমতি দেওয়ার অর্থ ডেল্টাসের উপর কম বাধা রয়েছে, যার অর্থ সম্ভবত সম্ভাব্যতর ভাল অনুসন্ধান করা এবং কিছু জায়গা সাশ্রয় করা।
তবে এর অর্থ হ'ল ডেল্টায় অ্যাক্সেস করা অপারেশনগুলিকে দীর্ঘতর শৃঙ্খলা অনুসরণ করতে হবে, যা তাদের কার্য সম্পাদনকে প্রভাবিত করে।
সুতরাং এটি একটি ট্রেড অফ, এবং এটি স্পষ্ট নয় যে ট্রেড অফ এমনকি একটি ভাল one

( অধ্যয়নের জন্য প্রতিশ্রুতি দেখুন)

আপনি দেখতে পাচ্ছেন যে নিয়মিত ক্রিয়াকলাপের জন্য সিপিইউ সঞ্চয়ের উন্নতি হয় যখনই আমরা গভীরতা হ্রাস করি।
তবে আমরা আরও দেখতে পাচ্ছি যে গভীরতা আরও বাড়ার সাথে সাথে স্থানের সঞ্চয় তত বড় নয়। 10 থেকে 50 এর মধ্যে 5-10% সাশ্রয় করা সম্ভবত সিপিইউ ট্রেড অফের পক্ষে মূল্যবান। 50% থেকে 100 এ যাওয়ার জন্য 1% সংরক্ষণ করা, বা 100 থেকে 250 থেকে 250% যেতে আরও 0.5% সম্ভবত নয়।

সিপিইউ সংরক্ষণের কথা বললে, " git repack " --threads=<n> বিকল্পটি গ্রহণ করতে এবং এটি প্যাক-অবজেক্টে পাস করতে শিখেছে।

জুনিও সি হামানো ( gitster ) দ্বারা 40bcf31 (26 এপ্রিল 2017) কমিট করুন দেখুন।
( জুনিও সি হামানো দ্বারা মার্জ - gitster - প্রতিশ্রুতি 31fb6f4 , 29 মে 2017)

repack: গ্রহণ --threads=<n> এবং এটি pack-objects নিচে দিন

আমরা ইতিমধ্যে --window=<n> এবং --depth=<n> ; এটি যখন একাধিক থ্রেড রেসিং দ্বারা প্রভাবিত না হয়ে প্রজননযোগ্য পরীক্ষার জন্য --threads=1 কে জোর করতে চায় তখন এটি সাহায্য করবে।


আজকাল কোনও পার্থক্য নেই: git gc --aggressive 2007 সালে লিনাসের পরামর্শ অনুসারে কাজ করে; নিচে দেখ. সংস্করণ 2.11 (Q4 2016) হিসাবে, গিট 50 এর গভীরতায় ডিফল্ট হয় 250 এর আকারের একটি উইন্ডো ভাল কারণ এটি প্রতিটি বস্তুর বৃহত্তর অংশটি স্ক্যান করে, তবে 250 এ গভীরতা খারাপ কারণ এটি প্রতিটি চেইনকে খুব গভীর পুরাতনকে রেফার করে তোলে অবজেক্টস, যা সামান্য নিম্ন ডিস্ক ব্যবহারের জন্য ভবিষ্যতের সমস্ত গিট অপারেশনকে ধীর করে দেয়।

ঐতিহাসিক পটভূমি

লিনাস পরামর্শ দিয়েছিল (সম্পূর্ণ মেইলিং তালিকা পোস্টের জন্য নীচে দেখুন) git gc --aggressive ব্যবহার করে - git gc --aggressive কেবল তখনই তাঁর ভাষায়, " সত্যই খারাপ প্যাক" বা "সত্যই মারাত্মক খারাপ বদ্বীপ", তবে "প্রায় সর্বদা, অন্যান্য ক্ষেত্রে, এটি আসলেই করা খুব খারাপ কাজ ”" ফলস্বরূপ এমনকি আপনি যখন শুরু করেছিলেন তার চেয়ে খারাপ অবস্থানে আপনার সংগ্রহস্থলটি ছেড়ে যেতে পারে!

"দীর্ঘ এবং জড়িত ইতিহাস" আমদানি করার পরে সঠিকভাবে এটি করার জন্য তিনি যে নির্দেশটি নির্দেশ করেন তা হ'ল

git repack -a -d -f --depth=250 --window=250

তবে এটি ধরে নিয়েছে যে আপনি ইতিমধ্যে আপনার সংগ্রহস্থল ইতিহাস থেকে অযাচিত বন্দুক মুছে ফেলেছেন এবং git filter-branch ডকুমেন্টেশনে পাওয়া একটি সংগ্রহস্থল সঙ্কুচিত করার জন্য আপনি চেকলিস্টটি অনুসরণ করেছেন।

গিট-ফিল্টার-শাখা ফাইলের একটি উপসেট থেকে মুক্তি পেতে ব্যবহার করা যেতে পারে, সাধারণত --index-filter এবং --subdirectory-filter --index-filter সংমিশ্রণে। লোকেরা প্রত্যাশিত সংগ্রহস্থলটি মূলের চেয়ে ছোট হওয়ার প্রত্যাশা করে তবে এটিকে আরও ছোট করার জন্য আপনার আরও কয়েকটি পদক্ষেপের প্রয়োজন কারণ গিট আপনার অবজেক্টগুলি না বলার আগেই চেষ্টা করবেন না G প্রথমে নিশ্চিত করুন যে:

  • আপনি যদি কোনও ব্লবকে তার জীবদ্দশায় স্থানান্তরিত করেন তবে আপনি প্রকৃতপক্ষে কোনও ফাইলের সমস্ত রূপ মুছে ফেলেছেন। git log --name-only --follow --all -- filename আপনাকে পুনরায় git log --name-only --follow --all -- filename করতে সহায়তা করতে পারে।

  • আপনি সত্যিই সমস্ত --tag-name-filter cat -- --all ফিল্টার করেছেন: --tag-name-filter cat -- --all git filter-branch কল করার সময়।

তারপরে একটি ছোট সংগ্রহস্থল পাওয়ার দুটি উপায় রয়েছে। একটি নিরাপদ উপায় হ'ল ক্লোন করা, এটি আপনার আসল অক্ষত রাখে।

  • git clone file:///path/to/repo দিয়ে এটি git clone file:///path/to/repo । ক্লোনটিতে সরানো বস্তু থাকবে না। গিট-ক্লোন দেখুন (নোট করুন যে একটি সরল পথ দিয়ে ক্লোনিং কেবল সমস্ত কিছুকেই যুক্ত করে!)

যদি আপনি সত্যিই এটি ক্লোন করতে না চান তবে যে কোনও কারণে, নিম্নলিখিত পয়েন্টগুলি পরিবর্তে (এই ক্রমে) পরীক্ষা করুন। এটি একটি অত্যন্ত ধ্বংসাত্মক পদ্ধতির, তাই একটি ব্যাকআপ নিন বা এটি ক্লোনিংয়ে ফিরে যান। তোমাকে সতর্ক করা হল.

  • গিট-ফিল্টার-শাখার ব্যাক আপযুক্ত মূল রেফগুলি সরান: বলুন

    git for-each-ref --format="%(refname)" refs/original/ |
      xargs -n 1 git update-ref -d
    
  • git reflog expire --expire=now --all রিফ্লোগ সহ সমস্ত রিফ্লাগের git reflog expire --expire=now --all

  • আবর্জনা git gc --prune=now সমস্ত git gc --prune=now বস্তু সংগ্রহ করে (বা যদি আপনার git gc আর্গুমেন্ট সমর্থন করতে যথেষ্ট নতুন না হয় তবে তার পরিবর্তে git repack -ad; git prune ব্যবহার করুন)।

Date: Wed, 5 Dec 2007 22:09:12 -0800 (PST)
From: Linus Torvalds <torvalds at linux-foundation dot org>
To: Daniel Berlin <dberlin at dberlin dot org>
cc: David Miller <davem at davemloft dot net>,
    ismail at pardus dot org dot tr,
    gcc at gcc dot gnu dot org,
    git at vger dot kernel dot org
Subject: Re: Git and GCC
In-Reply-To: <[email protected]>
Message-ID: <[email protected]>
References: <[email protected]>
            <[email protected]>
            <[email protected]>
            <[email protected]>
            <[email protected]>

থু, 6 ডিসেম্বর 2007 এ, ড্যানিয়েল বার্লিন লিখেছেন:

প্রকৃতপক্ষে, দেখা গেছে যে git-gc --aggressive ফাইলগুলি প্যাক করার জন্য এই বোবা জিনিসটি কখনও কখনও আপনি এসভিএন রেপো থেকে রূপান্তরিত করেছেন কিনা তা নির্বিশেষে pack

একেবারে। git --aggressive বেশিরভাগ বোবা। এটি সত্যিই কেবলমাত্র "আমি জানি যে আমার কাছে খুব খারাপ প্যাক রয়েছে এবং" আমি আমার দ্বারা করা সমস্ত খারাপ প্যাকিংয়ের সিদ্ধান্তগুলি ফেলে দিতে চাই ”"

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

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

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

এটি সাধারণত খুব ভাল জিনিস। এটি বিভিন্ন ধারণাগত কারণে ভাল ( যেমন গিটটি অভ্যন্তরীণভাবে কখনও পুরো সংশোধন শৃঙ্খলার যত্ন নেওয়ার প্রয়োজন হয় না - এটি ডেল্টাসের দিক থেকে আসলেই ভাবেন না), তবে এটি দুর্দান্ত কারণ অদম্য ব-দ্বীপের নিয়ম থেকে মুক্তি পাওয়ার অর্থ এই গিটের দুটি ফাইল একসাথে মার্জ করার ক্ষেত্রে কোনও সমস্যা নেই, উদাহরণস্বরূপ - কেবল কোনও স্বেচ্ছাচারী *,v "রিভিশন ফাইল" নেই যার কিছু গোপন অর্থ রয়েছে।

এর অর্থ হ'ল ডেল্টাসের পছন্দটি অনেক বেশি উন্মুক্ত প্রশ্ন। আপনি যদি ডেল্টা চেইনকে কেবল একটি ফাইলে সীমাবদ্ধ করেন, ডেল্টাস সম্পর্কে কী করা উচিত তা নিয়ে আপনার কাছে সত্যিকারের অনেক পছন্দ নেই, তবে গিটের মতে এটি সত্যই সম্পূর্ণ আলাদা একটি সমস্যা হতে পারে।

এবং এখানেই সত্যই খারাপ নামকরণ করা হয়েছে - --aggressive আসে While যদিও --aggressive সাধারণত ব-দ্বীপ তথ্য পুনরায় ব্যবহার করার চেষ্টা করে (কারণ এটি একটি ভাল ধারণা, এবং এটি সিপিইউর সময়টি আমরা পূর্বে যে সকল ভাল ডেল্টাস খুঁজে পেয়েছিলাম তার পুনরায় সন্ধান করার অপচয় করে না) , কখনও কখনও আপনি বলতে চান "আসুন একটি শূন্য স্লেট দিয়ে সমস্ত শুরু করুন, এবং পূর্ববর্তী সমস্ত ব-দ্বীপ তথ্য উপেক্ষা করুন এবং ডেল্টাসের একটি নতুন সেট তৈরি করার চেষ্টা করুন” "

সুতরাং - আক্রমনাত্মক আসলেই আক্রমণাত্মক হওয়ার বিষয়ে নয়, তবে সিপিইউর সময় নষ্ট করার বিষয়ে আমরা ইতিমধ্যে যে সিদ্ধান্তটি দিয়েছি তা পুনরায় করা!

কখনও কখনও এটি একটি ভাল জিনিস। বিশেষত কিছু আমদানি সরঞ্জাম সত্যিই মারাত্মক খারাপ ডেল্টাস তৈরি করতে পারে। git fast-import ব্যবহার করে এমন যে কোনও কিছুই উদাহরণস্বরূপ, সম্ভবত খুব ভাল একটি ব-দ্বীপ বিন্যাস নেই, তাই এটি বলার অপেক্ষা রাখে না যে "আমি একটি পরিষ্কার স্লেট থেকে শুরু করতে চাই” "

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

আমি git gc --aggressive একটি প্যাচ প্রেরণ করব কেবল git gc --aggressive ডকুমেন্টেশন মুছে ফেলতে। এটি দরকারী হতে পারে, তবে এটি কেবল তখনই কার্যকর যখন আপনি সত্যিই খুব গভীর স্তরে বুঝতে পারছেন যে এটি কী করছে এবং ডকুমেন্টেশন আপনাকে এটি করতে সহায়তা করে না।

সাধারণত, ইনক্রিমেন্টাল git gc করা সঠিক পদ্ধতি এবং git gc --aggressive করার চেয়ে ভাল। এটি পুরানো বদ্বীপগুলি পুনরায় ব্যবহার করতে চলেছে, এবং যখন সেই পুরানো ডেল্টাসগুলি খুঁজে পাওয়া যাবে না (প্রথম দিকে ইনক্রিমেন্টাল জিসি করার কারণ!) এটি নতুন তৈরি করতে চলেছে।

অন্যদিকে, এটি অবশ্যই সত্য যে একটি "দীর্ঘ এবং জড়িত ইতিহাসের প্রাথমিক আমদানি" এমন একটি পয়েন্ট যেখানে সত্যই ভাল ডেল্টাস সন্ধানের জন্য এটি অনেক সময় ব্যয় করার উপযুক্ত হতে পারে। তারপরে, প্রতিটি ব্যবহারকারী (যতক্ষণ না তারা এটিকে পূর্বাবস্থায় git gc --aggressive জন্য git gc --aggressive ব্যবহার না করে!) সেই এককালীন ইভেন্টের সুবিধা পাবেন। সুতরাং বিশেষত একটি দীর্ঘ ইতিহাস সহ বড় প্রকল্পগুলির জন্য, সম্ভবত কিছু অতিরিক্ত কাজ করা মূল্যবান, ব-দ্বীপে থাকা ডেল্টা সন্ধানের কোডটি বলা telling

সুতরাং git gc --aggressive সমতুল্য - git gc --aggressive - তবে সঠিকভাবে সম্পন্ন করা - হ'ল কিছু রাত্রে something

git repack -a -d --depth=250 --window=250

যেখানে এই গভীরতার জিনিসটি ডেল্টা চেইনগুলি কত গভীর হতে পারে (সেগুলি পুরানো ইতিহাসের জন্য দীর্ঘতর করুন - এটি স্পেসের ওভারহেডের পক্ষে মূল্যবান) এবং উইন্ডোটি হ'ল প্রতিটি ব-দ্বীপ প্রার্থীকে স্ক্যান করতে আমরা কতটা বড় অবজেক্ট উইন্ডোটি চাই।

এবং এখানে, আপনি ভাল -f পতাকা যুক্ত করতে চান (যা "সমস্ত পুরানো বেল্টগুলি ফেলে দিন", যেহেতু আপনি এখন এটি নিশ্চিত করার চেষ্টা করছেন যে এটি আসলে ভাল প্রার্থী খুঁজে পেয়েছে)।

এবং তারপরে এটি চিরকাল এবং একটি দিন গ্রহণ করতে চলেছে ( অর্থাত্ , "একটি রাতারাতি এটি করুন" জিনিস)। তবে শেষ ফলাফলটি হ'ল সেই সংগ্রহস্থল থেকে প্রবাহিত প্রত্যেকে নিজেরাই এতে কোনও প্রচেষ্টা ব্যয় না করেই আরও ভাল প্যাকগুলি পাবে।

          Linus

সাবধান। git gc --agressive না - রিপোজিটরির git gc --agressive যা আপনার যদি ব্যাকআপ নেই তবে রিমোটের সাথে সিঙ্ক্রোনাইজ হয় না।

এই অপারেশনটি স্ক্র্যাচ থেকে ডেল্টাসগুলিকে পুনরায় তৈরি করে এবং যদি নিখুঁতভাবে বাধা দেয় তবে ডেটা ক্ষতি হতে পারে।

আমার 8 গিগাবাইটের কম্পিউটারের জন্য আগ্রাসী জিসি 10 জি ছোট কমিট দিয়ে 1 জিবি সংগ্রহস্থলে মেমরির বাইরে চলে গেছে। যখন ওওএম কিলার গিট প্রক্রিয়াটি সমাপ্ত করে - এটি আমাকে প্রায় খালি সংগ্রহস্থল দিয়ে রেখেছিল, কেবলমাত্র কার্যকারী গাছ এবং কয়েকটি ডেল্টা বেঁচে গিয়েছিল।

অবশ্যই, এটি কেবলমাত্র সংগ্রহস্থলের অনুলিপি ছিল না তাই আমি কেবল এটি পুনরায় তৈরি করেছি এবং রিমোট থেকে টেনে নিয়েছি (আনতে ভাঙা রেপো কাজ করে না এবং 'ডেল্টাস সমাধান করার চেষ্টা করেছি' কয়েকবার ধাপে সমাধান করার চেষ্টা করেছি), তবে যদি আপনার রেপো হয় রিমোট ছাড়াই একক-বিকাশকারী স্থানীয় রেপো - প্রথমে এটি ব্যাক আপ করুন।


git gc --aggressive বিকল্প নাম এবং ডকুমেন্টেশন বিভ্রান্তিকর।

লিনাস নিজেই এই মেইলে যেমন ব্যাখ্যা করেছেন , git gc --aggressive করেন তা হ'ল:

যদিও গিট সাধারণত ডেল্টা তথ্য পুনরায় ব্যবহার করার চেষ্টা করে (কারণ এটি একটি ভাল ধারণা, এবং এটি সিপিইউর সময়টি আমাদের আগের ভাল বদ্বীপগুলি পুনরায় সন্ধান করার সময় নষ্ট করে না), কখনও কখনও আপনি বলতে চান "চলুন শুরু করা যাক, ফাঁকা স্লেট, এবং পূর্ববর্তী সমস্ত বদ্বীপ তথ্য উপেক্ষা করুন এবং ডেল্টাসের একটি নতুন সেট তৈরি করার চেষ্টা করুন "।

সাধারণত গিটে ডেল্টা গণনা করার দরকার হয় না, যেহেতু গিট এই ডেল্টাকে খুব নমনীয় করে নির্ধারণ করে। এটি কেবল তখনই বোধগম্য হয় যদি আপনি জানেন যে আপনার কাছে সত্যিই খারাপ বদ্বীপ রয়েছে। লিনাস যেমন ব্যাখ্যা করেছেন, প্রধানত সরঞ্জামগুলি যা git fast-import ব্যবহার করে এই বিভাগে আসে।

বেশিরভাগ সময় গিট দরকারী git gc --aggressive নির্ধারণ এবং git gc --aggressive ব্যবহার করে বেশ ভাল কাজ করে যা আপনাকে অনেকগুলি সিপিইউ সময় নষ্ট করার সময় git gc --aggressive সাথে ছেড়ে দেয় যা সম্ভবত আরও খারাপ।

লিনাস তার মেলটি এই উপসংহারে শেষ করেছেন যে একটি বৃহত - --depth এবং - --window সাথে git repack --depth --window ক্ষেত্রেই ভাল পছন্দ; বিশেষত আপনি একটি বড় প্রকল্প আমদানি করার পরে এবং গিটটি ভাল ডেল্টাস খুঁজে পেয়েছে তা নিশ্চিত করতে চান।

সুতরাং git gc --aggressive সমতুল্য - git gc --aggressive - তবে সঠিকভাবে সম্পন্ন করা - হ'ল কিছু রাত্রে something

git repack -a -d --depth=250 --window=250

যেখানে এই গভীরতার জিনিসটি ডেল্টা চেইনগুলি কত গভীর হতে পারে (সেগুলি পুরানো ইতিহাসের জন্য দীর্ঘতর করুন - এটি স্পেসের ওভারহেডের পক্ষে মূল্যবান) এবং উইন্ডোটি হ'ল প্রতিটি ব-দ্বীপ প্রার্থীকে স্ক্যান করতে আমরা কতটা বড় অবজেক্ট উইন্ডোটি চাই।

এবং এখানে, আপনি ভাল -f পতাকা যুক্ত করতে চান (যা "সমস্ত পুরানো ডেল্টাস ড্রপ", যেহেতু আপনি এখন এটি নিশ্চিত করার চেষ্টা করছেন যে এটি প্রকৃতপক্ষে ভাল প্রার্থী খুঁজে পেয়েছে)।






version-control