'গিট গুই' চালানোর সময় কীভাবে "লুজ অবজেক্ট" পপআপটি এড়িয়ে যায়


123

আমি যখন 'গিট গুই' চালাই তখন আমি পপআপ পাই যা বলবে

এই সংগ্রহস্থলের বর্তমানে প্রায় 1500 আলগা বস্তু রয়েছে।

এটি তখন ডাটাবেসকে সংকুচিত করার পরামর্শ দেয়। আমি এর আগে এটি করেছি এবং এটি আলগা বস্তুগুলিকে প্রায় 250 এ কমিয়ে দেয় তবে এটি পপআপকে দমন করে না। আবার কমপ্রেস করা আলগা বস্তুর সংখ্যা পরিবর্তন করে না।

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

মাঝামাঝি সময়ে, আমি সত্যিই এই 'সহায়ক' পপআপটি দূরে সরাতে চাই।


1
সেই কথোপকথন একটি "বৈশিষ্ট্য" এর একটি দুর্দান্ত উদাহরণ যা অনেক লোকই চাইবে এটি বিদ্যমান না। এটি কেবল বিরক্তিকরই নয়, এটি গুরুত্বপূর্ণ পুনর্নির্মাণগুলি মুছতে পারে যা হার্ড রিসেটের পরে আলাদা হয়ে যায়।
adelriosantiago

উত্তর:


169

যেহেতু কারও কাছে এখনও কোনও উত্তর নেই, আমি কোডটি কীভাবে সেই ডায়ালগটি দেখায় সেই কোডটি কীভাবে সরিয়ে ফেলতে হবে তা দেখতে into আমি hint_gcপদ্ধতিটি এটি করে এবং এটি যেখানে ডাকা হয় তা খুঁজে পেয়েছি । একই সাথে আমি লক্ষ্য করেছি যে ২০১১ এর শেষদিকে ডায়ালগটি অক্ষম করার জন্য একটি কনফিগারেশন বিকল্প যুক্ত করা হয়েছে । এই পরিবর্তনটি (গিট-গুই 0.16.0 এর অংশ) 2011-12-14 এ গিটের মূল লাইনে একত্রিত হয়েছিল ।

সুতরাং আপনি যদি গিট ভি 1.7.9 বা আরও বেশি ব্যবহার করেন তবে আপনি নিম্নলিখিত আদেশটি সহ সতর্কতা ডায়ালগটি অক্ষম করতে পারবেন:

git config --global gui.gcwarning false

আপনি যদি কোনও পুরানো সংস্করণ ব্যবহার করছেন তবে আপনি লাইনটি সম্পাদনা করতে /lib/git-core/git-guiএবং মুছে ফেলতে পারেন after 1000 hint_gc, বা প্রক্রিয়াটির /usr/share/git-gui/lib/database.tclঅংশটি সম্পাদনা করতে এবং মুছে ফেলতে পারেন hint_gc। (এই ফাইল পাথগুলি সাইগউইনে রয়েছে - অন্যান্য পরিবেশে ফাইলগুলি অন্য কোনও স্থানে থাকতে পারে Windows উইন্ডোজের জন্য এটি রয়েছে c:\Program Files\Git\mingw64\libexec\git-core\git-gui.tcl)


3
আলগা জিনিসগুলির after 1000 hint_gcপরে সতর্কতাটি ঘটে তাই আমরা কী বাড়াতে পারি 10000?
সাশোম

@ সাশোলাম আমি একমত এটি একটি কারণে আছে।
হ্যাঙ্ককা

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

2
@ সাশোম: সম্ভবত এটি আপনার অর্থ হতে পারে after 1000তবে ডায়ালগটি প্রদর্শিত না হওয়া পর্যন্ত অপেক্ষা করার জন্য "1000" মিলিসেকেন্ডের সংখ্যা বোঝায়। এটি "10000" এ বাড়িয়ে, ডায়ালগটি এখনও উপস্থিত হবে, তবে এটির পরিবর্তে এটি করতে 10 সেকেন্ড সময় লাগবে।
fuglede

1
যাইহোক, @ নিকডানডুলাকিসের উত্তরে উল্লিখিত হিসাবে, সীমাটির database.tclসংজ্ঞা রয়েছে এবং সংলাপটি কম ঘন ঘন ঘন করার জন্য এটি বাড়ানো যেতে পারে।
fuglede

50

আপডেট: git pruneইস্যুটিকে "সমাধান" করবে, যাতে এটি সেই আলগা বস্তুগুলি সরিয়ে ফেলবে
( git gcকলগুলি git prune, কিন্তু কেবলমাত্র দুই সপ্তাহের বেশি পুরানো objectsিলে জিনিসগুলির জন্য, ডিফল্টরূপে)।
তবে ওপি মাইকেল ডোনহুয়ে মন্তব্যে উল্লেখ করেছেন:

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


আসল উত্তর:

" git gc" সমস্ত আলগা বস্তু অপসারণ না করার সমস্যাটি "এর আগে জানা গিয়েছে (২০০৮ এর শেষ দিকে," " git gc" "আলগা বস্তুগুলিকে আর সরানো হবে বলে মনে হয় না "

git gcকেবল দুই সপ্তাহেরও বেশি পুরানো looseিলে .ালা সরিয়ে দেয়, আপনি যদি এখনই সেগুলি সরাতে চান তবে গিট প্রুন চালান।
তবে নিশ্চিত করুন যে আপনি চালানোর সময় অন্য কোনও গিট প্রক্রিয়া সক্রিয় হতে পারে না বা এটি সম্ভবত কোনও কিছুতে পদক্ষেপ নিতে পারে।

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

[উদাহরণ: ]পুরাতন শাখাগুলি যেমন কোনও ট্যাগের মাধ্যমে সংরক্ষিত থাকে next-20081204
আপনি যদি প্রতিদিন আপনার স্থানীয় অনুলিপিটির অনুলিপি আপডেট করেন তবে আপনি linux-nextএই পুরানো শাখা ট্যাগের একটি বিশাল সংখ্যা সংগ্রহ করবেন ulate
তারপরে যদি আপনি সেগুলির একটি সম্পূর্ণ সিরিজ মুছে ফেলেন এবং চালনা করেন git-gcতবে অপারেশনটি বেশ খানিকটা সময় নেবে এবং ব্যবহৃত ব্লক এবং ইনোডের সংখ্যা উল্লেখযোগ্যভাবে বৃদ্ধি পাবে।

তারা একটি " git prune" পরে অদৃশ্য হয়ে যাবে , তবে আমি যখন এই গৃহকর্ম পরিচালনা করি, আমি প্রায়শই --yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository"গিট জিসি" বিকল্পের জন্য চেয়েছিলাম ।

তাহলে আপনার ক্ষেত্রে, " git prune" কি সহায়ক হবে?

(সম্ভবত gc.pruneexpireউপরের আচরণটি ঘটানোর জন্য কনফিগার ভেরিয়েবলে "এখন" ব্যবহার করে )।


আপনারও রয়েছে (একই থ্রেড থেকে):

repack -a -d -l

ছোট হাতের 'ক' লক্ষ্য করুন।

git-gcআপেরকেস 'এ' দিয়ে রিপ্যাক কল করে যা অ্যাক্সেসযোগ্য বস্তুগুলিকে প্যাক না করে রাখে। ছোট্ট 'এ', সেই লোকদের জন্য যারা জানেন তারা কী করছে এবং গিটটি কেবল অ্যাক্সেসযোগ্য অবজেক্টগুলি ফেলে দিতে চায়।


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

খুব সহায়ক মন্তব্য। বিরক্তিকর "লুজ অবজেক্ট" বার্তাটি সত্যিই বিরক্তিকর হয়ে উঠছিল। যাইহোক যে গণনা আসে না? গিট-এফএসকে আউটপুট, সম্ভবত?
ডেভিড ডম্ব্রভস্কি

ধন্যবাদ - আমার কাছে এমন আলগা জিনিস ছিল যা গিট জিসি অপসারণ করছে না - গিট ছাঁটাই এর উত্তর ছিল।
চালিত

আমি কোনও সংগ্রহস্থলের বাইরে গিট ছাঁটাই করেছি এবং এটি কিছু বস্তু পরিষ্কার করেছে। তারপরে আমি সমস্যার সংগ্রহস্থলে গিয়ে একটি গিট প্রুন করেছি এবং সমস্ত সমস্যাগুলি শেষ হয়ে গেছে।
নিকোলাস ওরোলোস্কি

"গিট প্রুন" ওপির সমস্যাটি সমাধান করে (এবং আমি): "আমি এটি আগেও করেছি এবং এটি আলগা বস্তুগুলিকে প্রায় 250 বা কমিয়ে দেয় তবে এটি পপআপকে দমন করে না।"
আইকে

32

যখন "লুজ অবজেক্ট" পপআপ আমি জানি গিটের আবর্জনা সংগ্রহকারী চালানোর সময় হয়েছে:

git gc

এরপরে পপআপ চলে যায়।

আপডেট: (টিইডির পরামর্শের কারণে)

আমি নীচের রুটিনটি থেকে পেয়েছি git/share/git-gui/lib/database.tcl
আপনি আপনার প্রয়োজনগুলি পূরণ করতে এটি পরিবর্তন করতে পারেন।

proc hint_gc {} {
    set object_limit 8
    if {[is_Windows]} {
        set object_limit 1
    }

    set objects_current [llength [glob \
        -directory [gitdir objects 42] \
        -nocomplain \
        -tails \
        -- \
        *]]

    if {$objects_current >= $object_limit} {
        set objects_current [expr {$objects_current * 256}]
        set object_limit    [expr {$object_limit    * 256}]
        if {[ask_popup \
            [mc "This repository currently has approximately %i loose objects.

To maintain optimal performance it is strongly recommended that you compress the database when more than %i loose objects exist.

Compress the database now?" $objects_current $object_limit]] eq yes} {
            do_gc
        }
    }
}

1
কথোপকথনে ঠিক আছে ক্লিক করা কি তা করে না? জিসি যদি সমস্ত আলগা জিনিসগুলি থেকে মুক্তি না পান তবে তিনি ডায়ালগটি পেতে পারেন।
টেড

আমি 'ওকে' ক্লিক করেছি এবং আমি কমান্ড লাইন থেকে 'গিট জিসি' চালিয়েছি - তারা দু'জনেই আমাকে নেমে গেছে ২৫০-এ নামিয়ে, কিন্তু আবার এটি করার ফলে আর কোনও অগ্রগতি হয় না।
মাইকেল ডোনোহু

3
আমি জানি এটি অদ্ভুত তবে গুই থেকে বেস পরিষ্কার করা মাঝে মাঝে আলগা জিনিস ফেলে দেয়। আমি গুই বন্ধ করি, গিট-জিসি চালাই এবং তারপরে সমস্ত আবর্জনা নষ্ট হয়ে যায়।
নিক ডানডৌলাকিস

3
টিসিএল পরিবর্তন করা ঠিক করে দেয় - আমি সবেমাত্র উইন্ডোজ সীমা 10 * 250-এ উন্নীত করেছি Thanks ধন্যবাদ!
মাইকেল ডোনোহু

git gcকমান্ড লাইন থেকে দৌড়ানোর জন্য আমার সমস্যার সমাধান হয়েছে ... okগিট গুইতে ক্লিক করা কোনওভাবেই কৌশলটি করেনি ...
রাফেল

3

Hmmmm .... আমি যে এ জন্য একটি কম্যান্ড-লাইন যুক্তি দেখি না ডক্স

আমি মনে করি আপনি সর্বদা এর উত্সটি টেনে আনতে, সংলাপের জন্য কোডটি বের করে আবার তৈরি করতে পারেন।

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