"সর্বোত্তম পারফরম্যান্সের জন্য সংগ্রহস্থলটিকে অটো প্যাকিং" বলতে কী বোঝায়?


225

আমার গিট রেপোতে আমার সমস্যা হচ্ছে। গত দু'দিন ধরে আমি যখনই সার্ভারটিতে একটি ধাক্কা দিই আমি এই বার্তাটি পাই: "সর্বোত্তম পারফরম্যান্সের জন্য সংগ্রহস্থলটিকে স্বয়ংক্রিয়ভাবে প্যাকিং করা", এবং এটি শেলটি ফিরে যাবে বলে মনে হয় না।

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

উত্তর:


305

সংক্ষিপ্ত সংস্করণ: এর অর্থ এটি যা বোঝায়, এবং যদি আপনি কেবল এটি শেষ করতে দেন তবে সবকিছু ঠিকঠাক হবে।

বেশিরভাগ অপারেশন চলাকালীন যা সংগ্রহস্থলগুলিতে (পুশ সহ) looseিলে (ালা (প্যাকড না হওয়া) বস্তুর সংখ্যা সম্ভাব্যভাবে বাড়িয়ে তুলতে পারে, গিট অনুরোধ করে git gc --auto। যদি যথেষ্ট আলগা বস্তু থাকে (ডিফল্টরূপে, কমপক্ষে 6700) তবে এটি git repack -d -lতাদের প্যাক করার জন্য অনুরোধ করবে। যদি অনেকগুলি পৃথক পৃথক প্যাক থাকে তবে এটি সেগুলিকে আবার এক হিসাবে দেখিয়ে দেবে।

একটি প্যাকটি একটি ডেল্টা-সংকুচিত একক ফাইল, যাতে প্রচুর পরিমাণে অবজেক্ট থাকে। প্যাকগুলিতে বস্তু সংরক্ষণে এটি আরও দক্ষ, তবে বস্তুগুলি প্যাক করতে (কমপ্রেস) সময় লাগে, সুতরাং গিট প্রথমে আলগা বস্তু তৈরি করে, সেগুলি এখন এবং তারপরে, স্বয়ংক্রিয়ভাবে অনুরোধের মাধ্যমে তাদের এখন ব্যাচগুলিতে প্যাক করে git gc --auto

যদি আপনি গিটকে পুনঃস্থাপন শেষ করতে দেন তবে কিছুক্ষণের জন্য আবার এটি হবে না। এটি সত্যিই কিছুক্ষণ সময় নিতে পারে, বিশেষত আপনার কাছে যদি প্রচুর পরিমাণে বাইনারি অবজেক্ট থাকে তবে এটি যদি ট্রিগার হয় তবে এটি একটি চিহ্ন যে এটি রেপো দ্বারা নেওয়া ডিস্ক জায়গার পরিমাণকে তাত্পর্যপূর্ণভাবে হ্রাস করবে। যদি আপনি সত্যিই এটি না চান তবে আপনি কনফিগার প্যারামিটারটি পরিবর্তন করতে পারেন gc.auto। আপনি যদি এটি 6700 এর চেয়ে বড় কিছুতে বাড়িয়ে দেন তবে এটি কম ঘন ঘন ঘটবে, তবে এটি করার পরে আরও বেশি সময় লাগবে। আপনি যদি এটি হ্রাস করেন তবে এটি আপনার বর্তমান প্রতিবেদনটি করতে হবে তবে পরবর্তী সময়ে এটি আরও প্রায়শই ঘটে এবং আরও দ্রুত শেষ হয়। আপনি যদি এটি 0 তে সেট করে থাকেন তবে এটি স্বয়ংক্রিয় পুনঃস্থাপন অক্ষম করবে।

দেখুন man git-gc(অধীনে --auto) এবং man git-config(অধীনে gc.autoআরও তথ্যের জন্য)।


14
প্রকৃতপক্ষে, এটি আমার জন্য প্রায় 5 মিনিট সময় নিয়েছে, তবে এটি শেষ হয়েছিল। দুর্দান্ত উত্তর।
জোশুয়া পিন্টার

6
আমরা প্রতিটি ধাক্কা দিয়ে এটি দেখতে পাচ্ছি (কয়েক সেকেন্ডের জন্য কিছুক্ষণ তৈরি করে হি)।

2
@ ডিপিকে: এটি সাধারণ পরিস্থিতিতে না হওয়া উচিত - এটির ট্রিগার করার জন্য একক ধাক্কায় থাকা বস্তুর সংখ্যা এত বেশি হওয়া উচিত নয় (যদি না আপনার ভাণ্ডার বিপুল পরিমাণে থাকে এবং / অথবা আপনি প্রচুর কমিট চাপছেন না ), সুতরাং সফলভাবে একবার সম্পূর্ণ হয় (আপনি এটিকে সম্পূর্ণ হতে দিচ্ছেন, তাই না?) যতক্ষণ না আপনি এটি তৈরি করেন ততক্ষণে এটি আর হওয়া উচিত নয়। যদি আপনি এটি বের করতে না পারেন তবে একটি পৃথক প্রশ্ন জিজ্ঞাসা করুন।
ক্যাসাবেল

6
"যদি আপনি গিটকে শেষ করতে দেন", এবং এটি করতে পারে ... fatal: Out of memory, malloc failed (tried to allocate 79610689 bytes) error: failed to run repack- এটি আমার গিটারের রেপোতে পুরো কোডবেস স্টিক করার জন্য আমি পেয়েছি। অনুমান করুন আমি অ্যাপ্লিকেশনগুলি মেরে ফেলব এবং "ম্যানুয়ালি" বলপূর্বক
পুনরুদ্ধার করব

11
আমি প্রতিবার একবার গিট টানতে এটি পেয়ে যাচ্ছি। আমি একটি ম্যানুয়াল গিট জিসি করেছি, তবে যতবার টানছি ততবারে তা ঘটে happens রহস্যময়।
ব্যারি কেলি

51

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

ঝোলা জিনিসগুলি অটো-প্যাকিং সম্পর্কে চলমান বার্তাগুলি ট্রিগার করছে কিনা তা দেখতে, চালনার চেষ্টা করুন git fsck। যদি আপনি ঝুঁকির কমিটগুলির একটি দীর্ঘ তালিকা পান তবে আপনি সেগুলি দিয়ে পরিষ্কার করতে পারেন

git gc --prune=now

অটো-প্যাকিং বার্তাটি একবারে টানার পরেও না চলে গেলে আমাকে সাধারণত আমার রেপোতে প্রতি 2-3 মাস পরে চালাতে হয়।


5
গৃহীত উত্তর না হলেও, এটি আমার প্রয়োজন মতো ছিল। git pullবেশ কয়েকদিন ধরে আমি প্রতিবার বার বার বার বার বার পেয়েছি এবং fsckসত্যিই প্রচুর ঝাঁকুনির প্রতিশ্রুতি দেখিয়েছি।
জার্ন জেফেরার

36

একটি প্রকল্পের জন্য অক্ষম করতে:

cd your_project_dir
git config gc.auto 0

বিশ্বব্যাপী অক্ষম করতে:

git config --global gc.auto 0

2
আমি মনে করি যে আমি কীভাবে খুঁজে পেয়েছি: .git ফোল্ডারে যান, কনফিগার ফাইলটি খুলুন এবং 'অটো = 0' পাঠ্যটি মুছুন এবং সংরক্ষণ করুন। এটি অটোপ্যাকিংটিকে পুনরায় সক্ষম করে বলে মনে হচ্ছে।
অ্যাড্রিয়ান কেইস্টার

18
git config
jtatum

10

গিট গিট-রেপ্যাক চালাচ্ছে, যা অনেকগুলি বস্তু (= ফাইল, কমিট এবং ট্রি) একটি প্যাক ফাইলে প্যাক করে। গিট কখনও কখনও এটি করে, যখন কোনও হিউরিস্টিক বলে যে স্থান বাঁচাতে পারে (প্যাক ফাইলে সংকোচিত অবজেক্ট ডেল্টাস থাকে, যখন বস্তু / ডিরেক্টরিতে প্রতিটি ফাইল সংকুচিত পূর্ণ ফাইল সামগ্রী থাকে)


2

আশা করি, সেই git gc --autoপদক্ষেপটি এখন (গিট ২.০.১, জুন 25, 2014) আরও দক্ষ। এনগুইন থাই এনগ্যাক দুয় ( ) দ্বারা 62aad18 কমিট
দেখুনpclouds

gc --auto: ব্যাকগ্রাউন্ডে রেফগুলি লক করবেন না

9f673f9 ( gc: ব্যাকগ্রাউন্ডে --আউটো ​​চালানোর জন্য কনফিগার বিকল্প - 2014-02-08, গিট 2.0.0) gc --autoব্যবহারকারীর অপেক্ষার সময় কমাতে " " ব্যাকগ্রাউন্ডে রাখে ।
আবর্জনা সংগ্রহের অংশ হ'ল প্যাক-রেফ এবং ছাঁটাই করা রিফ্লাগগুলি। এর জন্য কিছু রেফ লক করা প্রয়োজন এবং একই রেফটি লক করার চেষ্টা করা অন্যান্য প্রক্রিয়া বাতিল করতে পারে।

যদি gc --autoকোনও স্ক্রিপ্টের মাঝখানে নিক্ষেপ করা হয়, পটভূমিতে জিসির হোল্ডিং লকগুলি স্ক্রিপ্টটি ব্যর্থ হতে পারে, যা 9f673f9 এর আগে কখনও ঘটতে পারে না ।

সমান্তরাল রেফারেন্স আপডেটগুলি থামাতে অগ্রভাগে চলমান pack-refsএবং " reflog --prune" চালিয়ে যান । অবশিষ্ট ব্যাকগ্রাউন্ড অপারেশন (পুনরায়, ছাঁটাই এবং পুনরায়) চলমান গিট প্রক্রিয়াগুলিকে প্রভাবিত করবে না।

এবং গিট 2.22 (কিউ 2 2019) আরও অনুকূলিত করেgit gc

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