জিআইটি ফাইল ডেল্টা সংরক্ষণ করে না, তবুও আপনি কি পূর্ববর্তী ফাইল সংস্করণগুলিতে রোলব্যাক করতে পারেন (সীমাহীন সময়?)


14

আমি পড়েছি যে গিট ফাইল ডেল্টা সংরক্ষণ করে না। যদি এটি সত্য হয় তবে কীভাবে এটি পূর্ববর্তী সংস্করণগুলিতে ফাইল রোলব্যাক সমর্থন করে? যদি এটি পুরো ফাইলটি সঞ্চয় করে থাকে তবে ডিস্কে থাকা সংগ্রহস্থল স্থানটি নিয়ন্ত্রণহীনভাবে বড় হতে হবে। গিট কি ফাইল রোলব্যাকগুলি সমর্থন করে এবং পৃথক (গুলি) ফাইল সংস্করণ 1 এ ফিরে আসে? এমনকি এটি ফাইল সম্পর্কিত সম্পর্কিত কোনও সংস্করণ ধারণাকেও সাপোর্ট করে? এটি একটি ভিসিএস / ডিভিসিএস এবং আমার প্রয়োজনীয়তা সম্পর্কে আমার বোঝার জন্য প্রয়োজনীয় (আমি বিশ্বাস করি)। আমি আগের সংস্করণগুলির সাথে যা যাচাই করতে যাচ্ছি তার সাথে তুলনা করতে সক্ষম হতে হবে।

উত্তর:


44

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

সম্পূর্ণ-গাছ বনাম পৃথক-ফাইল

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

# 10 foo.c-changes ago
git show $(git rev-list -n 10 --reverse HEAD -- foo.c | head -1):foo.c

# 10 whole-tree-changes ago
git show HEAD~10:foo.c

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

স্টোরেজ দক্ষতা

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

প্যাক ফাইলে থাকা অবজেক্টগুলি প্লেইন কমপ্রেসড ডেটা (একটি লুজ অবজেক্টের মতোই, অন্যের অবজেক্টের সাথে কেবল বান্ডিল করা), বা অন্য কোনও অবজেক্টের বিপরীতে সংক্ষেপিত ডেল্টাস হিসাবে সংরক্ষণ করা যেতে পারে। ডেল্টাসগুলি একত্রে কনফিগারযোগ্য গভীরতা ( pack.depth) -তে বেঁধে রাখা যেতে পারে এবং যেকোন উপযুক্ত বস্তুর বিপরীতে তৈরি করা যেতে পারে ( pack.windowগিটার সেরা ব-দ্বীপ ঘাঁটির জন্য কীভাবে ব্যাপকভাবে অনুসন্ধান করে তা নিয়ন্ত্রণ করে; doingতিহাসিকভাবে অপ্রাসঙ্গিক ফাইলের একটি সংস্করণ যদি বেস হিসাবে ব্যবহার করা যায় তবে ফলন হবে) ভাল ডেল্টা সংক্ষেপণ)। অক্ষাংশ যে গভীরতা এবং উইন্ডো আকারের কনফিগারেশনগুলি ডেল্টা সংকোচনের ইঞ্জিন দেয় প্রায়শই সিভিএস-শৈলীর সহজ-এক-সংস্করণ-বিপরীতে-পূর্ববর্তী / পূর্ববর্তী সংস্করণ "ডিফ" সংক্ষেপণের চেয়ে ভাল ডেল্টা সংকোচনের ফলাফল দেয়।

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

দেখুন কিভাবে গীত দোকান অবজেক্টস এবং Packfile বিভাগে গীত কমিউনিটি বুক । এছাড়াও গিট প্যাক-অবজেক্টস ম্যানপেজ

* আপনি "পুনর্লিখনের ইতিহাস" এবং গিট পুনরায় সেট করার মতো কমান্ড দিয়ে গিটকে ফেলে দেওয়া কমিটগুলি বলতে পারেন , তবে এই ক্ষেত্রেও গিট নতুনভাবে বাতিল হওয়া কিছুটা সময়ের জন্য "ঝুলে যায়", কেবলমাত্র যদি আপনি সিদ্ধান্ত নেন যে আপনার প্রয়োজন আছে। দেখুন Git reflog এবং Git খেজুর


3
আপনার সরবরাহ করা তথ্যের পরিমাণ এবং বিশদের জন্য মাত্র +1
তামারা উইজসম্যান

3
এছাড়াও, কারণ গিট ডেল্টাসের পরিবর্তে ফাইলগুলির স্ন্যাপশট ব্যবহার করে, ইতিহাসে অনেক দীর্ঘ পিছনে ফিরে যাওয়া আসলে সহজ। 20 কমিট আগে আপনার কোনও ফাইল দেখার দরকার আছে তা কল্পনা করুন। ডেল্টাস সহ, আপনাকে ২০ টি পরিবর্তনসেট পূর্বাবস্থায় ফেলা দরকার; স্ন্যাপশটগুলির সাহায্যে, আপনি কেবল সঠিক স্ন্যাপশটটি ধরবেন। আপনার ইতিহাস যত দীর্ঘ হবে তত সুবিধা bigger এবং যদি আপনি বর্তমান সংস্করণ এবং যে এক মধ্যে পরিবর্তন দেখতে চাই, এটা ঠিক একটি একক পরিবর্তন আছে, বরং সিদ্ধান্ত নিতে কৃতকর্মের হয়েছে, পূর্বাবস্থায় ফেরানো, পুনরায় করা, ইত্যাদি থাকার চেয়ে
নাথন লং

ক্রিস, আপনার মনে হয় গিট ইন্টারনালগুলিতে বেশ ভাল হ্যান্ডেল রয়েছে। কোন সুযোগ আপনি এই দোল নিতে পারে? stackoverflow.com/questions/5176225/…
নাথান লং

@ ক্রিস জোহেনসেন দয়া করে আমাকে এটি বুঝতে সাহায্য করুন। আপনি যা বলেছিলেন তার উপর ভিত্তি করে, গিট কি সাবভার্সনের চেয়ে একই (বা আরও ভাল) স্টোরেজ দক্ষতা অর্জন করতে পারে? আমি জানি যে আমি যদি অনেকবার সামান্য পরিবর্তন নিয়ে একটি ফাইলটি করি তবে 1 জিবি মূল্যবান ডেটা 100 এমবিতে সংরক্ষণ করা যায় be গিটও কি একই কাজ করতে পারে?
আলিরেজা নুরি

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

1

এটি একই পৃষ্ঠায় পড়া যেতে পারে:

...

ফলস্বরূপ, গিট উত্স কোড গাছের নীচে কোনও স্তরে স্পষ্টভাবে ফাইল পুনর্বিবেচনার সম্পর্কগুলি রেকর্ড করে না।

...

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

...

সুতরাং আপনি কোনও ফাইলের পূর্ববর্তী সংশোধনগুলিতে ফিরে যেতে এবং দুটি ফাইলের তুলনা করতে পারেন।


1

গিট প্রকৃতপক্ষে ফাইলের ডেল্টা সংরক্ষণ করে, তবে এটি তাদের পুরো ফাইল ট্রি এর বদ্বীপ হিসাবে সংরক্ষণ করে।

সংস্করণগুলির মধ্যে পার্থক্যগুলি দেখতে, নিম্নলিখিত একটি করুন:

  1. গিট ডিফ - সর্বশেষ চেক করা সংস্করণ এবং ফাইলগুলির পরিবর্তিত হওয়া ফাইলগুলির মধ্যে পার্থক্য দেখায়, তবে git addসেগুলি চালিত হয়নি ।
  2. গিট ডিফ - ক্যাশে - পূর্ববর্তী সংস্করণ এবং সমস্ত ফাইল যা git addচালিত হয়েছিল তার মধ্যে পার্থক্য দেখায় , কিন্তু প্রতিশ্রুতিবদ্ধ হয়নি
  3. গিট ডিফ কমিট - বর্তমান ওয়ার্কিং ডিরেক্টরি এবং পূর্ববর্তী কমিটের সাথে কমিটের সাথে বর্ণিত পার্থক্য দেখান
  4. git diff comma..commitb - দুটি কমিটের মধ্যে পার্থক্য দেখায়, a এবং b। কমিটগুলি শাখা বা ট্যাগগুলির মতো প্রতীকী নামও হতে পারে।

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