"দীর্ঘ এবং জড়িত ইতিহাস" আমদানি করার পরে সঠিকভাবে এটি করার জন্য তিনি যে নির্দেশটি নির্দেশ করেন তা হ'ল
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