গিট স্টোর ফাইলগুলি কীভাবে হয়?


225

আমি কেবল গিট শিখতে শুরু করেছি এবং এটি করার জন্য আমি গিট সম্প্রদায় বইটি পড়া শুরু করেছি এবং এই বইয়ে তারা বলেছে যে এসভিএন এবং সিভিএস ফাইলগুলির মধ্যে পার্থক্য সংরক্ষণ করে এবং এই গিটটি সমস্ত ফাইলের একটি স্ন্যাপশট সংরক্ষণ করে।

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

পিএস: গিট শেখার জন্য কারও কাছে যদি আরও ভাল উত্স থাকে তবে আমি এটির প্রশংসা করব।


20
এখানে একটি উজ্জ্বল পোস্ট যা গিট কীভাবে কাজ করে তা বিশদে ব্যাখ্যা করে। আপনি যা খুঁজছেন তা সম্ভবত the অবজেক্ট ডাটাবেস সম্পর্কে।
গ্রেগ টায়ার

অন্যান্য দুর্দান্ত সংস্থানগুলিতে লিঙ্কযুক্ত দুর্দান্ত নিবন্ধ আমি কয়েক ঘন্টা ধরে এগুলি নিয়ে মজা করেছি।
মিহাই

2
: আমি এই সত্যিই চমৎকার নিবন্ধ ভিতর থেকে Git বর্ণনা পাওয়া maryrosecook.com/blog/post/git-from-the-inside-out
Sumudu

উত্তর:


275

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

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

কিছু ভাল উল্লেখ রয়েছে:

গিটকে আপনি গিট কমিট কমান্ডের সাহায্যে আপনার প্রকল্পের একটি স্ন্যাপশট সংরক্ষণ করতে চান এবং এটি আপনার প্রকল্পের সমস্ত ফাইলের বিন্দুটি কেমন দেখাবে তার ম্যানিফেস্টটি রেকর্ড করে

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


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

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

ব-দ্বীপ-ভিত্তিক ভিসিএস

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

স্ন্যাপশট-ভিত্তিক ভিসিএস

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


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

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


4
@ জনহুদেক ভাল পয়েন্ট আরও দৃশ্যমানতার জন্য আমি আপনার মন্তব্যে উত্তরে অন্তর্ভুক্ত করেছি।
ভোনসি

1
গিট-এর মতো স্টোরেজ প্যাটার্ন, ওরফে হ্যাশ-ভিত্তিক মান স্টোরের জন্য কম্পিউটার বিজ্ঞানের শব্দটি কি কেউ জানেন? (বা অনুরূপ কিছু)
জোয়ানস ভারমোরেল

34
ওপির আসল প্রশ্নের প্রসঙ্গে প্রথম অনুচ্ছেদটি সত্যই বিভ্রান্তিকর বলে মনে হচ্ছে। এটা তোলে যতক্ষণ না আপনি আমরা যে শিখতে যে চূড়ান্ত অনুচ্ছেদে পেতে নয়, ওহ হ্যাঁ, আসলে গীত করে "দোকান [...] টি ফাইল মধ্যে পার্থক্য। সত্যিই আশা তথ্য টপ আপ পতাকাঙ্কিত ছিল এবং এত গভীর কবর দিল। তাই বলা হয়, এ কৃতজ্ঞতা অন্তত আপনার উত্তরের কোথাও আসল গল্পটি অন্তর্ভুক্ত করুন;)
জোশ ওব্রায়ান

1
@ নিকভলিনকিন গ্রেট! আমি আনন্দিত যে এই উত্তরগুলি আরও বেশি শ্রোতা খুঁজে পেয়েছে।
ভোনসি

1
আরেকটি ভাল বই: গিট ফ্রম দ্য বটম আপ: ftp.newartisans.com/pub/git.from.bottom.up.pdf
জোনাস বার্লিন

46

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

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

একই ফর্ম্যাটটি টানতে বা ধাক্কা দেওয়ার সময়ও ব্যবহৃত হয় (কমপক্ষে কিছু প্রোটোকল দিয়ে), যাতে সেই ফাইলগুলি আবার সংক্ষেপণ করতে হবে না।

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


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