gitlab




কিভাবে গিট দোকান ফাইল আছে? (2)

আমি শুধু গিট শিখতে শুরু করেছিলাম এবং তা করার জন্য আমি গিট কমিউনিটি বুক পড়তে শুরু করি, এবং এই বইয়ে তারা বলে যে, SVN এবং CVS ফাইলগুলির মধ্যে পার্থক্য সঞ্চয় করে এবং যে সমস্ত গিটগুলি সমস্ত ফাইলগুলির স্ন্যাপশট সঞ্চয় করে।

কিন্তু আমি স্ন্যাপশট দ্বারা তারা কি মানে সত্যিই পেতে না। Git সত্যিই প্রতিটি কমিট মধ্যে সব ফাইল একটি কপি করে তোলে কারণ আমি তাদের ব্যাখ্যা থেকে বুঝতে কি।

পিএস: জিট শেখার জন্য যদি কোনও ভাল উৎস থাকে তবে আমি কৃতজ্ঞ থাকব।


Git logically তার SHA1 এর অধীনে প্রতিটি ফাইল সঞ্চয় করে। এর অর্থ কী হল যদি আপনার কাছে দুটি ফাইল রয়েছে যা একই সংগ্রহের সাথে একই রকম সামগ্রীতে থাকে (অথবা যদি আপনি একটি ফাইলের নামকরণ করেন), কেবল একটি কপি সংরক্ষণ করা হয়।

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

একই ফরম্যাটটি যখন টেনে বা push করা হয় (কমপক্ষে কিছু প্রোটোকলের সাথে), তখন সেই ফাইলগুলিকে আবার পুনরায় কম্প্রেস করতে হবে না।

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


Git প্রতিটি ফাইলগুলির সম্পূর্ণ কপিটি সন্নিবেশ করানোর জন্য অন্তর্ভুক্ত করে, যেটি ইতিমধ্যে গিট রেপোতে উপস্থিত সামগ্রীটির জন্য, স্ন্যাপশট কেবল ডুপ্লিকেটের পরিবর্তে সামগ্রীতে নির্দেশ করবে।
এর অর্থ এই যে একই সামগ্রী সহ কয়েকটি ফাইল শুধুমাত্র একবার সংরক্ষণ করা হয়।

সুতরাং একটি স্ন্যাপশট মূলত একটি কমিট, ডিরেক্টরি কাঠামোর বিষয়বস্তু উল্লেখ।

কিছু ভাল রেফারেন্স আছে:

আপনি Git কে আপনার প্রকল্পটির স্ন্যাপশটটি git commit কমান্ডটি সংরক্ষণ করতে চান তা বলুন এবং এটি মূলত আপনার প্রোজেক্টের সমস্ত ফাইল সেই বিন্দুতে কেমন দেখাচ্ছে তার একটি ম্যানিফেস্ট রেকর্ড করে

ল্যাব 12 পূর্ববর্তী স্ন্যাপশট পেতে কিভাবে ব্যাখ্যা করে

প্রোগিট বইয়ের স্ন্যাপশটটির আরও ব্যাপক বিবরণ রয়েছে:

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

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

এই গিট এবং প্রায় অন্যান্য অন্যান্য VCS মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য। এটি Git সংস্করণ নিয়ন্ত্রণের প্রায় প্রতিটি দিক পুনর্বিবেচনার করে তোলে যা পূর্ববর্তী প্রজন্ম থেকে অনুলিপি করা অন্যান্য সিস্টেমগুলি। এটি জিটিটিকে কেবল একটি ভিসিএসের পরিবর্তে এটির উপরে নির্মিত কিছু অবিশ্বাস্যভাবে শক্তিশালী সরঞ্জামগুলির সাথে একটি মিনি ফাইল সিস্টেমের মতো করে তোলে।

জন হুডেক এই গুরুত্বপূর্ণ মন্তব্য যোগ করেছেন :

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





git