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


91

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

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

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

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

উত্তর:


78

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


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

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

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

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

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

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

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

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

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

  • সঙ্গে এটি ক্লোন 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 gc --prune=now(বা যদি আপনার পরিবর্তে ব্যবহার git gcকরার পক্ষে যুক্তি সমর্থন করতে যথেষ্ট নতুন না হয় )।--prunegit 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: <4aca3dc20712052111o730f6fb6h7a329ee811a70f28@mail.gmail.com>
Message-ID: <alpine.LFD.0.9999.0712052132450.13796@woody.linux-foundation.org>
References: <4aca3dc20712051947t5fbbb383ua1727c652eb25d7e@mail.gmail.com>
            <20071205.202047.58135920.davem@davemloft.net>
            <4aca3dc20712052032n521c344cla07a5df1f2c26cb8@mail.gmail.com>
            <20071205.204848.227521641.davem@davemloft.net>
            <4aca3dc20712052111o730f6fb6h7a329ee811a70f28@mail.gmail.com>

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

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

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

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

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

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

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

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

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

তাই --aggressiveসত্যিই আক্রমনাত্মক হচ্ছে না, কিন্তু সম্পর্কে নাশক CPU- র সময় একটি সিদ্ধান্ত ইতিমধ্যে আমরা আগে করেনি পুনরায় করছেন!

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

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

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

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

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

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

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

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

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

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

          Linus

4
গভীরতা সম্পর্কে আপনার মন্তব্যটি কিছুটা বিভ্রান্তিকর। প্রথমে আমি অভিযোগ করতে যাচ্ছিলাম যে আপনি মারা গেছেন ভুল, যে আক্রমণাত্মক একটি গিট সংগ্রহস্থলকে তীব্রতর করতে পারে। আক্রমণাত্মক আবর্জনা সংগ্রহের পরে একটি বিশাল রেপো যা গিট স্ট্যাটাসটি সেকেন্ডে হ্রাস করতে পাঁচ মিনিট সময় নেয়। তবে আমি বুঝতে পেরেছিলাম আপনি আক্রমণাত্মক জিসি রেপোকে কমিয়ে দিয়েছিলেন তা নয়, তবে মাত্র একটি অত্যন্ত বড় গভীরতার আকার।
ব্যবহারকারী 6856

58

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

আমি "হিসাবে উল্লেখ করেছে গীত বর্জ্য সংগ্রহ সম্পূর্ণরূপে কাজ বলে মনে হচ্ছে না ", একটি 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 aggressive50 এ ডিফল্ট গভীরতা সেট করবে

দেখুন 07e7dbf কমিট দ্বারা (11 আগস্ট 2016) জেফ কিং ( peff)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 0952ca8 , 21 সেপ্টেম্বর 2016)

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

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

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

" --aggressive" এ পতাকা git-gcতিনটি বিষয় আছে:

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

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

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

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

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


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

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

repack: গ্রহণ করুন --threads=<n> এবং এটি নিচে পাসpack-objects

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


4
আমি "গিট আবর্জনা সংগ্রহ সম্পূর্ণরূপে কাজ করে না" লিঙ্কে লিনাস থ্রেডটি উল্লেখ করেছি
ভোনসি

4
এই আধুনিক আপডেটের জন্য ধন্যবাদ ! এখানে অন্য প্রতিটি উত্তর পুরানো। এখন আমরা দেখতে পাচ্ছি যে git gc --aggressiveএটি দুবার সংশোধন করা হয়েছে: প্রথমত, লিনাস 2007 সালে "একটি ভাল প্যাকিং পদ্ধতি" হিসাবে পরামর্শ দিয়েছিলেন তা করার জন্য। এবং তারপরে গিট ২.১১-এ লিনাস যে অতিরিক্ত বস্তুর গভীরতার পরামর্শ দিয়েছিল তা এড়ানোর জন্য যা ক্ষতিকারক হয়ে উঠেছে (ভবিষ্যতের সমস্ত গিট অপারেশনকে ধীর করে দেয় এবং কথা বলার মতো কোনও জায়গাই সংরক্ষণ করেনি)।
gw0

git gc, git repack -Ad এবং git prune এর পরে আমার সংগ্রহস্থলের আকার বাড়ে ... কেন?
ডিপস করে

@ ডিভোপস নিশ্চিত নন: আপনি গিটের কোন সংস্করণ ব্যবহার করছেন? আপনি তার জন্য একটি নতুন প্রশ্ন জিজ্ঞাসা করতে পারেন (আরও বিশদ সহ যেমন ওএস, আপনার রেপোর সাধারণ আকার, ...)
ভনসি

man git-repackএর জন্য বলেছেন -d: red অপ্রয়োজনীয় আলগা বস্তু ফাইলগুলি সরাতে গিট প্রুন-প্যাকটি চালান `` অথবা git pruneএটিও করে? man git-pruneবলে In most cases, users should run git gc, which calls git prune., তাহলে এর পরে git gcকি ব্যবহার ? এটি ব্যবহার করা ভাল বা যথেষ্ট হবে না git repack -Ad && git gc?
জাকব

14

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

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

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

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

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


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

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

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

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

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


9

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

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

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

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


5

দ্রষ্টব্য: git gc --aggressiveগিট ২.২২ (Q2 2019) স্পষ্ট করে যেমন ব্যবহার থেকে সাবধান থাকুন ।

দেখুন কমিট 0044f77 , daecbf2 কমিট , 7384504 কমিট , 22d4e3b কমিট , কমিট 080a448 , 54d56f5 কমিট , d257e0f কমিট , কমিট b6a8d09 (07 এপ্রিল 2019), এবং fc559fb কমিট , cf9cd77 কমিট , কমিট b11e856 (22 মার্চ 2019) দ্বারা (Ævar Arnfjörð Bjarmason avar)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে ac70c53 কমিট , 25 এপ্রিল 2019)

gc ডকস: এর কার্যকারিতা ডুবপ্লে --aggressive

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

সুতরাং আসুন এটি কী করে তা পরিষ্কার করে দেওয়া যাক এবং ব্যবহারকারীকে তাদের নিজস্ব সিদ্ধান্তগুলি আঁকতে দিন।

জেফ কিং-এর ব্যাখ্যাটির একটি সংক্ষিপ্ত সংস্করণ প্যারাফ্রেজ করার জন্য "প্রভাবগুলি [...] অবিচলিত" স্পষ্ট করে দিন

এর অর্থ গিট-জিসি ডকুমেন্টেশনে এখন অন্তর্ভুক্ত রয়েছে :

আগ্রাসী

যখন --aggressiveবিকল্প সরবরাহ করা হয়, git-repackসঙ্গে প্রার্থনা করা হবে না -fপতাকা, যেটা ঘুরে ফিরে পাস হবে --no-reuse-deltaথেকে Git প্যাক-বস্তু
এটি পুনঃস্থাপনে আরও বেশি সময় ব্যয় করে যে কোনও বিদ্যমান ডেল্টা ফেলে দেবে এবং তাদের পুনরায় গণনা করবে।

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

তদ্ব্যতীত, সরবরাহ --aggressiveখামচি হবে --depthএবং --windowঅপশন প্রেরণ git-repack
দেখুনgc.aggressiveDepth এবং gc.aggressiveWindowসেটিংস থেকে কম।
একটি বৃহত উইন্ডো আকার ব্যবহার করে আমরা আরও সর্বোত্তম ডেল্টাস খুঁজে পাওয়ার সম্ভাবনা বেশি।

এই পছন্দটি অনুযায়ী পারফরম্যান্স বেঞ্চমার্ক না চালিয়ে কোনও প্রদত্ত সংগ্রহস্থলটিতে এই বিকল্পটি ব্যবহার করা সম্ভবত এটির পক্ষে উপযুক্ত নয়
এটি অনেক বেশি সময় নেয় এবং ফলস্বরূপ স্থান / ব-দ্বীপ অপ্টিমাইজেশন এটি উপযুক্ত নাও হতে পারে। এটিকে মোটেই ব্যবহার না করা বেশিরভাগ ব্যবহারকারীর এবং তাদের সংগ্রহস্থলের জন্য সঠিক বাণিজ্য trade

এবং ( 080a448 কমিট করুন) ):

gc ডক্স: নোট করুন --aggressive প্রভাব --window&--depth

07e7dbf থেকে ( gc: 50 ডিফল্ট আক্রমনাত্মক গভীরতা 2016-08-11, গীত v2.10.1) আমরা কিছুটা confusingly অধীনে একই গভীরতা ব্যবহার--aggressive হিসাবে আমরা ডিফল্টরূপে না।

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

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