গিট-জিসি কতবার ব্যবহার করা উচিত?


233

গিট-জিসি কতবার ব্যবহার করা উচিত?

ম্যানুয়েল পৃষ্ঠা কেবল বলেছেন:

ব্যবহারকারীরা প্রতিটি ডিস্কিস্টোরির মধ্যে নিয়মিতভাবে এই কাজটি ভাল ডিস্ক স্পেসের ব্যবহার এবং ভাল অপারেটিং পারফরম্যান্স বজায় রাখতে উত্সাহিত করা হয়।

জিসি করার সময় হয়েছে কিনা তা খুঁজে বের করার জন্য কিছু বস্তু গণনা করার জন্য কিছু আদেশ রয়েছে?


এর মতো কাজগুলি ক্রোনের প্রধান প্রার্থী (আপনি যদি লিনাক্স ব্যবহার করছেন) minhajuddin.com/2011/12/09/…
খাজা মিনহাজউদ্দিন

1
দ্রষ্টব্য: সেটিং gc.autodetach(গিট 2.0 git gc --autoকিউ 2 2014) ব্যবহারকারীকে ব্লক না করে চলতে সহায়তা করতে পারে । দেখতে নীচের আমার উত্তর
ভনসি

উত্তর:


204

এটি বেশিরভাগ ভাণ্ডার ব্যবহৃত হয় তার উপর নির্ভর করে। একজন ব্যবহারকারী দিনে একবার এবং একটি শাখা / মার্জ / ইত্যাদি ক্রিয়াকলাপের সাথে সপ্তাহে একবারে আপনার সম্ভবত বছরের মধ্যে একবারের বেশি চালানোর দরকার নেই।

একাধিক ডজন বিকাশকারীরা প্রতিদিন প্রতিটি চেকিংয়ে কয়েক ডজন প্রকল্পে প্রতিদিন ২-৩ বার কাজ করে থাকেন, আপনি এটি রাত্রে চালাতে চাইতে পারেন।

যদিও এটি প্রয়োজনের চেয়ে বেশি ঘন ঘন এটি চালাতে ক্ষতি করবে না।

আমি যা করব তা এখন চালানো হয়, তার পর থেকে এক সপ্তাহ পরে ডিস্কের ব্যবহারের একটি পরিমাপ করুন, আবার এটি চালান, এবং আবার ডিস্কের ব্যবহার পরিমাপ করুন। যদি এটি 5% আকারে নেমে যায় তবে সপ্তাহে একবার এটি চালান। যদি এটি আরও ড্রপ হয়, তবে এটি আরও ঘন ঘন চালান। যদি এটি কম ড্রপ করে, তবে এটি ঘন ঘন চালান।


17
ম্যানুয়াল বলছে "কিছু গিট কমান্ডগুলি অপারেশন সম্পাদন করে গিট জিসি - অটো চালায় যা অনেকগুলি আলগা বস্তু তৈরি করতে পারে।" কেউ জানেন যে কোন কমান্ড আসলে এটি চালায়?
জোশুয়া ডান্স

2
একটি বৃহত গিট রিবেস একটি সুস্পষ্ট উদাহরণ, যেহেতু অনেকগুলি কমিট নতুন ইতিহাসে
রচিত হয়

20
"এটি প্রয়োজনের চেয়ে বেশি ঘন ঘন এটি চালাতে ক্ষতি করে না" ... আমি পুরোপুরি একমত নই। যেমন অ্যারিস্টটল দেখিয়েছেন, ঝুঁকিপূর্ণ কমিটগুলি একটি ভাল ব্যাকআপ প্রক্রিয়া তৈরি করতে পারে।
জেসন বেকার

105

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

সুতরাং আপনার ব্যক্তিগত ক্লোনগুলিতে খুব ঝরঝরে ফ্রিক হবেন না। এটির জন্য খুব সামান্য প্রয়োজন আছে।

OTOH, তথ্য পুনরুদ্ধারের মান মূলত রিমোটস হিসাবে ব্যবহৃত repos এর জন্য প্রশ্নবিদ্ধ। সমস্ত ডেভস স্থান এবং / অথবা থেকে টেনে নিয়ে যায়। সেখানে, একটি GC রান এবং ঘন ঘন একটি পুনরায় প্রচার বন্ধ করা বুদ্ধিমান হতে পারে।


38
FWIW সব আলগা বস্তু আবর্জনা ডিফল্ট (Cf. দ্বারা সংগৃহীত হয়, কেবলমাত্র সেই পুরানো 2 সপ্তাহ git gc --help, নির্দিষ্টভাবে --pruneবিকল্প)। এর উল্লেখ রয়েছে gc.reflogExpire, যা আমাকে বিশ্বাস করতে পরিচালিত করে যে আপনি গত 90 দিনের মধ্যে যে কোনও প্রতিশ্রুতি দেখেছেন তা সংগ্রহ করা হবে না। (আমার গিট সংস্করণ: v1.7.6)
রবএম

30

গিট গিগের সাম্প্রতিক সংস্করণগুলি যখন প্রয়োজন হয় তখন স্বয়ংক্রিয়ভাবে চালিত হয়, সুতরাং আপনাকে কিছু করতে হবে না। Man git-gc (1) এর বিকল্প বিভাগটি দেখুন : "কিছু গিট কমান্ডগুলি গিট জিসি - অটো চালিয়ে অপারেশন করার পরে অনেকগুলি আলগা বস্তু তৈরি করতে পারে" "


13
আমি এটি প্রথমবারের জন্য কয়েক বছরের পুরানো রিপোজিটরিতে চালিয়েছি এবং আমার .git 16M থেকে 2.9M এ চলে গেছে, আকারে 82% হ্রাস পেয়েছে। সুতরাং কমান্ডটি ম্যানুয়ালি চালানো এখনও কার্যকর বলে মনে হচ্ছে।
দর্শনা রিভকা হুইটল

@ দর্শনা রিভকা কি এই কয়েক বছরে আপনি গিট আপডেট করেছেন?
std''OrgnlDave

1
@ std''OrgnlDave হ্যাঁ, আর্কে বর্তমান সংস্করণটি যা ছিল তা আমি সর্বদা চালিয়ে যাচ্ছিলাম। আমি কেবল এটি আবার চালিয়েছি, সম্ভবত আমার প্রথম মন্তব্য (প্রথমবারের মতো আমার মন্তব্যের জন্য আপনাকে মনে করিয়ে দেওয়ার জন্য ধন্যবাদ), এবং আমার .git ৮১ এম থেকে ১৩ এম এ চলে গেছে। আমার gc --autoঅনুমান যে চলমান কমান্ডগুলি অবশ্যই চালানো উচিত নয় ।
দর্শনা রিভকা হুইটল

18

আপনি যদি গিট-গুই ব্যবহার করছেন তবে কখন আপনার চিন্তা করা উচিত তা এটি আপনাকে বলে :

This repository currently has approximately 1500 loose objects.

নিম্নলিখিত কমান্ড একটি অনুরূপ সংখ্যা আনতে হবে:

$ git count-objects

এর উত্স থেকে বাদে গিট-গুই নিজে থেকেই গণিতটি করবে, প্রকৃতপক্ষে .git/objectsফোল্ডারে কিছু গণনা করছে এবং সম্ভবত একটি আনুমানিকতা আনবে (আমি এটি tclসঠিকভাবে পড়তে জানি না !)।

যে কোনও ক্ষেত্রে, এটি 300 টি প্রায় শিথিল বস্তুর বিরুদ্ধে একটি স্বেচ্ছাসেবী সংখ্যার ভিত্তিতে সতর্কতা দেবে বলে মনে হচ্ছে


প্রকৃতপক্ষে এটি সতর্ক করে দেয়, তবে এটি জিসি চালানোর পরে বেশিরভাগ সময় জিসি কোনও কাজ না করে। এটি করার জন্য গিট গির উপর নির্ভর করা, always০০০ এরও বেশি কিছু looseিলে objectsালা বস্তুর জন্য অপেক্ষা করা হয় সর্বদা যে কোনও রান জিসিতে ক্লিক করে একটি মিনিটের জন্য অপেক্ষা করা বা বাতিল করতে হবে: / সম্ভবত কেউ গিট গুই এমনভাবে ঠিক করতে হবে যাতে এটি সর্বোচ্চ আলগা পরীক্ষা করে অবজেক্ট কাউন্ট এবং গণনা সীমাতে না আসা পর্যন্ত ডায়ালগটি দেখাতে বিরক্ত করবেন না।
ম্লাতু

হ্যাঁ @ মিল্লাতু আমি একমত আমি যখন এটি লিখেছি তখন আমি কেবল এটির দিকে মনোযোগ আনতে চাইছিলাম। উভয়ই Git-Guiএবং count-objectsএখানে প্রশ্নের ঠিক সঠিক উত্তর নয় ... তবে তাদের হওয়া উচিত!
ক্রেগক্স

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

7

আপনি যখন ঘুমাচ্ছেন তখন প্রতি রাতে (বিকেলে?) চলমান ক্রোন চাকরিতে এটিকে ফেলে দিন।


7

আমি বড় চেকআউট করার পরে গিট গিসি ব্যবহার করি এবং অনেক নতুন অবজেক্ট থাকে। এটি স্থান বাঁচাতে পারে। উদাহরণস্বরূপ, যদি আপনি গিট-এসএনএন ব্যবহার করে কোনও বড় এসভিএন প্রকল্প চেকআউট করে থাকেন এবং একটি গিট জিসি করেন, আপনি সাধারণত প্রচুর স্থান সংরক্ষণ করেন


এটা কি এখনও সত্য? এমনকি '08 সালে এইচডিডি স্পেসটি সস্তা ছিল, এটি চালানোর ন্যায্যতা হিসাবে এটি অর্থহীন বলে মনে হয়
থাইমাইন

7

নতুন (গিট 2.0 কিউ 2 2014) সেটিং সহ আপনি কোনও বাধা ছাড়াই এটি করতে পারেন gc.autodetach

কমিট 4c4ac4d দেখুন এবং 9f673f9 কমিট করুন ( এনগুইন থাই এনগ্যাক ডুয়, ওরফে পক্লাউডস ):

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


২.০ প্রকাশের পরে, তবুও একটি বাগ ছিল: গিট 2.7 (কিউ 4 2015) ত্রুটি বার্তাটি না হারানোর বিষয়টি নিশ্চিত করবে ।
দেখুন 329e6e8 কমিট (19 সেপ্টেম্বর 2015) দ্বারা গান Nguyễn গান Thái আরো Ngọc গান Duy ( pclouds)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 076c827 , 15 অক্টোবর 2015)

gc: ডিমনাইজড থেকে লগ সংরক্ষণ করুন gc --autoএবং পরের বার এটি মুদ্রণ করুন

যদিও কমিট 9f673f9 ( gc: চালানোর জন্য কনফিগ বিকল্প --autoপটভূমিতে - 2014-02-08) সম্পর্কে 'কিছু অভিযোগ কমাতে সাহায্য করে gc --auto' টার্মিনাল নুড়ি, এটা সমস্যার আরেকটি সেট তৈরি করে।

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

ডিমনাইজড gcএখন সংরক্ষণ stderrকরে $GIT_DIR/gc.log
নিম্নলিখিতটি gc --autoচালানো এবং gc.logমুছে ফেলা হবে না যতক্ষণ না ব্যবহারকারী মুছে ফেলেনgc.log


6

এই উদ্ধৃতিটি নেওয়া হয়েছে; গিট সহ সংস্করণ নিয়ন্ত্রণ

গিট আবর্জনা সংগ্রহ স্বয়ংক্রিয়ভাবে চালায় :

There ভান্ডারগুলিতে খুব বেশি আলগা জিনিস থাকলে objects

• যখন কোনও দূরবর্তী সংগ্রহস্থলের দিকে ধাক্কা ঘটে a

Some কিছু কমান্ডের পরে যা হয়ত অনেকগুলি আলগা বস্তুর পরিচয় দেয়

Some যখন গিট রিফ্লগের মতো কিছু কমান্ড স্পষ্টভাবে এটির জন্য অনুরোধ করে

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

আপনার কয়েকটি পরিস্থিতিতে গিট জিসি চালানো বিবেচনা করা উচিত:

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

Some কিছু কমান্ডের পরে যা হয়ত অনেকগুলি আলগা বস্তুর পরিচয় দেয়। উদাহরণস্বরূপ এটি একটি বৃহত রিবেস প্রচেষ্টা হতে পারে।

এবং উল্টাতে আপনি কখন আবর্জনা সংগ্রহ থেকে সাবধান থাকতে হবে?

There যদি অনাথ রেফ থাকে তবে আপনি পুনরুদ্ধার করতে চাইতে পারেন

G গিটের প্রসঙ্গে এবং আপনার চিরতরে রেজোলিউশনগুলি সংরক্ষণ করার দরকার নেই

Only শুধুমাত্র ট্যাগ এবং শাখাগুলির প্রসঙ্গে গিট স্থায়ীভাবে একটি প্রতিশ্রুতি বজায় রাখতে পারে

F FETCH_HEAD পুনরুদ্ধারের প্রসঙ্গে (গিট আনার মাধ্যমে URL- সরাসরি পুনরুদ্ধার) কারণ তারা অবিলম্বে আবর্জনা সংগ্রহের বিষয়


2
আমার গাছে আমার অ্যাক্সেস অযোগ্য কমিট রয়েছে (ফলস্বরূপ git commit --amend)। এটি দিয়ে যাচাই করা যেতে পারে git log --reflog। আমি একটি শাখা দূরবর্তী সংগ্রহস্থলে ঠেকিয়ে আবার আমার গাছটি পরীক্ষা করেছি; অ্যাক্সেসযোগ্য কমিটগুলি এখনও সেখানে ছিল। দৃশ্যত git gcযখন এই ধাক্কাটি ঘটে তখন চালানো হয়নি। …?
ছারভে

4

আমি যখন বড় প্রতিশ্রুতিবদ্ধ তখন আমি ব্যবহার করি, সর্বোপরি যখন আমি সংগ্রহস্থল থেকে আরও ফাইল সরিয়ে ফেলি .. পরে, কমিটগুলি আরও দ্রুত হয়


1

আপনাকে git gcখুব git gcঘন ঘন ব্যবহার করতে হবে না, কারণ (আবর্জনা সংগ্রহ) বেশ কয়েকটি ঘন ঘন ব্যবহৃত কমান্ডগুলিতে স্বয়ংক্রিয়ভাবে চালিত হয়:

git pull
git merge
git rebase
git commit

উত্স: গিট জিসি সেরা অনুশীলন এবং FAQS

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