
আগমন de Git 2.54 এটি সফটওয়্যার ডেভেলপমেন্টের জন্য বিশ্বের সবচেয়ে বহুল ব্যবহৃত ভার্সন কন্ট্রোল সিস্টেমের বিবর্তনে একটি নতুন পদক্ষেপের সূচনা করে। এই চক্রে ১৩০ জনেরও বেশি সদস্যের সমন্বয়ে গঠিত প্রজেক্ট কমিউনিটি, গিট-এর বৈশিষ্ট্যপূর্ণ শক্তিকে অক্ষুণ্ণ রেখে সাধারণ কাজগুলোকে সহজ করার উপর মনোযোগ দিয়েছে।
নতুন বৈশিষ্ট্যগুলোর মধ্যে যেগুলো সবচেয়ে আকর্ষণীয় হতে পারে, সেগুলো হলো একটি নতুন উপায় ইতিহাস পুনর্লিখন আরও সরাসরিভাবে বলতে গেলে, সাধারণ কনফিগারেশন ফাইল থেকে শেয়ার্ড হুক কনফিগার করার ক্ষমতা এবং অভ্যন্তরীণ উন্নতি যা দ্রুততর ও সহজে রক্ষণাবেক্ষণযোগ্য রিপোজিটরি তৈরির লক্ষ্যে কাজ করে, বিশেষ করে বড় বা কর্পোরেট প্রকল্পগুলোতে।
গিট ২.৫৪: নতুন রিলিজের সংক্ষিপ্ত বিবরণ
গিট ২.৫৪ হলো ভবিষ্যতের ৩.০ শাখার পথে একটি অন্তর্বর্তীকালীন সংস্করণ, কিন্তু এটি এমন কিছু পরিবর্তন এনেছে যা অনেক ডেভেলপারের দৈনন্দিন কাজকে প্রভাবিত করে। উদাহরণস্বরূপ, পরীক্ষামূলক কমান্ড git history প্রকাশ করা হয়েছে।সহজ হিস্ট্রি রিরাইটিং অপারেশনের জন্য ডিজাইন করা হয়েছে। এছাড়াও, হুকস সিস্টেমটিকে সম্প্রসারিত ও আধুনিক করা হয়েছে এবং এখন এটি সেটিংস থেকে পরিচালনা করা যায়; জিওমেট্রিক মেইনটেন্যান্স স্ট্র্যাটেজি এখন ডিফল্ট হিসেবে সেট করা হয়েছে।
এছাড়াও, আগে থেকে পরিচিত কমান্ডগুলিতে উন্নতি অন্তর্ভুক্ত করা হয়েছে, যেমন git add -p, git replay, git status অথবা git rebaseএর পাশাপাশি HTTP ট্রান্সপোর্ট, GPG সিগনেচার প্রদর্শনের পদ্ধতি এবং অবজেক্ট ডেটাবেসের অভ্যন্তরীণ কার্যপ্রণালীতেও পরিবর্তন আনা হয়েছে। যদিও এই নতুন বৈশিষ্ট্যগুলির মধ্যে অনেকগুলিই উন্নতমানের, ব্যবসা, সরকারি প্রশাসন এবং বৃহৎ রিপোজিটরিযুক্ত ওপেন সোর্স প্রকল্পগুলির সাধারণ কার্যপ্রবাহে এগুলির প্রভাব লক্ষণীয় হবে।
নতুন পরীক্ষামূলক কমান্ড git history: কমিটগুলো সহজে পুনর্লিখন করার সুবিধা
গিট ২.৫৪-এর অন্যতম প্রধান সংযোজন হলো গিট ইতিহাসএটি একটি পরীক্ষাধীন কমান্ড, যা এমন সব ক্ষেত্রে ব্যবহারের জন্য তৈরি করা হয়েছে যেখানে ইন্টারেক্টিভ রিবেস ব্যবহার করাটা বাড়াবাড়ি হয়ে যায়। এখন পর্যন্ত, লোকাল হিস্ট্রি পরিবর্তন করার জন্য সবচেয়ে প্রচলিত টুলটি ছিল git rebase -iখুবই নমনীয়, কিন্তু একই সাথে আরও জটিল এবং ব্যবহারকারীকে এমন পরস্পরবিরোধী অবস্থায় ফেলে দেওয়ার প্রবণতা রয়েছে, যা ম্যানুয়ালি সমাধান করতে হয়।
বিরূদ্ধে গিট ইতিহাস নির্দিষ্ট কিছু কাজের জন্য আরও সরাসরি পন্থা অবলম্বন করা হয়: উদাহরণস্বরূপ, টাইপো সংশোধন করুন কিছু পরিবর্তন আগের একটি কমিটের মেসেজে, অথবা খুব বড় হয়ে যাওয়া একটি কমিটকে দুটি ভাগে বিভক্ত করা। এর মূল উদ্দেশ্য হলো, টাস্ক লিস্ট এবং মধ্যবর্তী ধাপসহ একটি ইন্টারেক্টিভ রিবেসের সম্পূর্ণ কাঠামো তৈরি না করেই হিস্ট্রি পরিবর্তন করার একটি নিয়ন্ত্রিত উপায় প্রদান করা।
রিওয়ার্ড সাবকমান্ড: ওয়ার্কিং ট্রি স্পর্শ না করে কমিট বার্তা পরিবর্তন করা
নতুন ব্যবস্থা যে প্রথম পদ্ধতিটি চালু করছে তা হলো git history reword <commit>চালু করা হলে, গিট ব্যবহারকারী-কনফিগার করা এডিটরটি খোলে। নির্দিষ্ট কমিট বার্তাআপনাকে এটি সরাসরি পরিবর্তন করার সুযোগ দেয়। আপনি যখন এডিটরটি সেভ করে বন্ধ করেন, তখন গিট সেই কমিটটি পুনরায় লেখে এবং স্বয়ংক্রিয়ভাবে তার অধীনস্থ ব্রাঞ্চগুলোকে নতুন ভার্সনটির দিকে নির্দেশ করার জন্য আপডেট করে দেয়।
ইন্টারেক্টিভ রিবেসের তুলনায় মূল পার্থক্যটি হলো যে `git history reword` ওয়ার্কিং ট্রি বা ইনডেক্স কোনোটিকেই স্পর্শ করে না।এটি শুধুমাত্র হিস্ট্রি আপডেট করে। এই কারণে এটি কন্টিনিউয়াস ইন্টিগ্রেশন এনভায়রনমেন্ট বা অটোমেটেড স্ক্রিপ্টের জন্য বিশেষভাবে উপযোগী, কারণ এটি এমনকি বেয়ার রিপোজিটরিতেও কাজ করতে পারে, যা কোম্পানি বা প্রতিষ্ঠানের অভ্যন্তরীণ কোড সার্ভারগুলিতে সাধারণ, যেখানে কোনো সংশ্লিষ্ট ওয়ার্কিং ট্রি থাকে না।
স্প্লিট সাবকমান্ড: ইন্টারেক্টিভভাবে একটি কমিট বিভক্ত করুন
দ্বিতীয় মোড, git history split <commit>এটি এমন পরিস্থিতির জন্য ডিজাইন করা হয়েছে যেখানে একটি একক কমিটে এমন পরিবর্তন থাকে যা আলাদা করা প্রয়োজন। এটি কার্যকর করা হলে, Git সেই কমিটের সাথে যুক্ত হাঙ্কগুলি প্রদর্শন করে এবং `git extract`-এর মতোই আপনাকে বেছে নিতে দেয় যে কোনগুলি একটি নতুন প্যারেন্ট কমিটে এক্সট্র্যাক্ট করা হবে। গিট অ্যাড-পি ইনডেক্সে কোন কোডগুলো যোগ করা হবে তা সিদ্ধান্ত নেওয়ার সময়।
ফ্র্যাগমেন্টগুলো নির্বাচন করা হয়ে গেলে, গিট একটি তৈরি করে নতুন কমিট যেখানে হাঙ্কগুলোকে মূলটির প্যারেন্ট হিসেবে বেছে নেওয়া হয়েছে।এটি পূর্ববর্তী কমিটের অনির্বাচিত পরিবর্তনগুলো ধরে রাখে। তারপর, এটি নতুন হিস্ট্রি স্ট্রাকচারকে নির্দেশ করার জন্য ডিসেন্ড্যান্ট ব্রাঞ্চগুলোকে রিরাইট করে। আবার, এই অপারেশনটি ওয়ার্কিং ট্রি-এর বর্তমান বিষয়বস্তু পরিবর্তন না করেই চলে, ফলে রিপোজিটরিটি একটি জটিল অন্তর্বর্তী অবস্থায় থেকে যাওয়ার সম্ভাবনা কমে যায়।
সীমাবদ্ধতা এবং অন্যান্য কর্মপ্রবাহের সাথে সামঞ্জস্য
আচরণ নিয়ন্ত্রণযোগ্য রাখতে, গিট হিস্ট্রি মার্জ কমিট সহ হিস্ট্রি সমর্থন করে না। এবং অপারেশনটির ফলে মার্জ কনফ্লিক্ট দেখা দিলে এটি আর চলতে চায় না। এটি ছোটখাটো পরিবর্তনের জন্য ডিজাইন করা হয়েছে, ব্যাপক পুনর্লিখনের জন্য নয়, যা সাধারণত এর মাধ্যমে সামলানো হয়। git rebase -i অথবা আরও কঠোর হিস্ট্রি ক্লিনিং কৌশল।
অভ্যন্তরীণভাবে, কমান্ডটি একটি কার্যপ্রণালীর উপর নির্ভর করে। গিট রিপ্লেযা ওয়ার্কিং ট্রি স্পর্শ না করে অন্য একটি বেসে কমিট পুনরুৎপাদন করার জন্য একটি পরীক্ষামূলক টুল হিসেবে সুসংহত হচ্ছে। এই কাজের একটি অংশ ছিল সেই লজিকটিকে একটি সাধারণ লাইব্রেরিতে নিয়ে আসা, যাতে উভয়ই git history কারণ অন্যান্য ভবিষ্যৎ কার্যকারিতাগুলো আরও মডুলার পরিকাঠামো থেকে উপকৃত হতে পারে, যা স্ক্রিপ্ট বা থার্ড-পার্টি টুল ব্যবহার করে সহজে স্বয়ংক্রিয় করা যায়।
কনফিগারেশন-ভিত্তিক হুক: অটোমেশন শেয়ার করা এবং একত্রিত করা
গিট ২.৫৪-এর আরেকটি উল্লেখযোগ্য নতুন বৈশিষ্ট্য হলো এই ক্ষমতা যে কনফিগারেশন ফাইলগুলিতে সরাসরি হুকগুলি সংজ্ঞায়িত করুনডিরেক্টরিতে রাখা স্ক্রিপ্টগুলির উপর সম্পূর্ণরূপে নির্ভর করার পরিবর্তে .git/hooks অথবা নির্দেশিত পথে core.hooksPathএই পরিবর্তনের ফলে ম্যানুয়ালি ফাইল প্রতিলিপি না করেই বিভিন্ন রিপোজিটরির মধ্যে চেক শেয়ার করা অনেক সহজ হয়ে গেছে।
এখন পর্যন্ত, একাধিক প্রজেক্ট জুড়ে প্রতিটি কমিটের আগে, উদাহরণস্বরূপ, একটি কোড ফরম্যাটার বা সিক্রেটস অ্যানালাইজার প্রয়োগ করতে হলে, প্রতিটি রিপোজিটরিতে হুক স্ক্রিপ্টটি কপি করতে হতো অথবা বাহ্যিক হুক ম্যানেজমেন্ট টুল ব্যবহার করতে হতো। নতুন পদ্ধতির মাধ্যমে, সংজ্ঞায়িত করা সম্ভব। কেন্দ্রীয় হুক ~/.gitconfig বা একটি মধ্যে /etc/gitconfig কর্পোরেট এবং প্রয়োজন অনুসারে এগুলো প্রয়োগ করা হোক।
কনফিগারেশন দ্বারা হুক নির্ধারণ এবং প্রতি ইভেন্টে একাধিক কমান্ড
নতুন সিনট্যাক্সটি স্টাইল কনফিগারেশন কী-এর উপর ভিত্তি করে তৈরি। hook.<nombre>.command y hook.<nombre>.eventপ্রথমটি নির্দেশ করে কোন কমান্ডটি কার্যকর করা হবে, এবং দ্বিতীয়টি নির্দিষ্ট করে কোন হুক ইভেন্ট এটি ট্রিগার করেউদাহরণস্বরূপ একটি pre-commit বা একটি pre-pushযেহেতু এটি একটি স্ট্যান্ডার্ড কনফিগারেশন, তাই এই সেটিংসগুলো বিভিন্ন স্তরে সহাবস্থান করতে পারে: ব্যবহারকারী, সিস্টেম বা রিপোজিটরি।
তাছাড়া গিট এখন অনুমতি দেয় যে একই ইভেন্টে একাধিক হুক বরাদ্দ করা হয়েছেঅন্য কথায়, আপনি উদাহরণস্বরূপ, প্রতিটিতে চালানোর জন্য একটি লিন্টার এবং একটি ক্রেডেনশিয়াল স্ক্যানার সংজ্ঞায়িত করতে পারেন। pre-commitসেগুলোকে ম্যানুয়ালি একটি স্ক্রিপ্টে একত্রিত করার প্রয়োজন ছাড়াই। গিট ক্রমানুসারে কনফিগারেশন এন্ট্রিগুলোর মধ্য দিয়ে যায় এবং প্রতিটি কমান্ড কার্যকর করে, পাশাপাশি ক্লাসিক স্ক্রিপ্টের জন্যও সমর্থন বজায় রাখে। $GIT_DIR/hooksযা পূর্ববর্তী কনফিগারেশনগুলো নষ্ট না করার জন্য শেষেও চলতে থাকে।
হুকগুলির ব্যবস্থাপনা, নিষ্ক্রিয়করণ এবং অভ্যন্তরীণ আধুনিকীকরণ
কোন হুকগুলো সক্রিয় আছে এবং সেগুলো কোথা থেকে আসছে তা পরীক্ষা করার জন্য, নিম্নলিখিত কমান্ডটি অন্তর্ভুক্ত করা হয়েছে। git hook listযা প্রত্যেকের উৎস দেখায়, যা ব্যবস্থাপনার ক্ষেত্রে উপযোগী। কেন্দ্রীভূত কনফিগারেশন কর্পোরেট পরিবেশে, যদি কোনো নির্দিষ্ট রিপোজিটরিকে গ্লোবাল ফাইল থেকে উত্তরাধিকারসূত্রে প্রাপ্ত কোনো হুক বাদ দিতে হয়, তবে সেট করাই যথেষ্ট। hook.<nombre>.enabled = falseমূল কনফিগারেশনটি মুছে ফেলা বা পরিবর্তন করার প্রয়োজন ছাড়াই।
অভ্যন্তরীণভাবে, গিট-এর আছে এর অভ্যন্তরীণ অনেকগুলো হুক পরিচালনার পদ্ধতিকে একীভূত ও আধুনিকীকরণ করা হয়েছে।বেশ কিছু ইন্টিগ্রেশন পয়েন্ট, যেগুলো আগে অ্যাড-হক রুটের মাধ্যমে পরিচালিত হতো, যেমন হুকস ফর pre-push, post-rewrite বা তাদের receive-packতারা এখন নতুন হুকস এপিআই ব্যবহার করছে। এটি কেবল সামঞ্জস্যই আনে না, বরং নির্দিষ্ট ইন্টিগ্রেশনগুলো পুনরায় না লিখেই কন্টিনিউয়াস ইন্টিগ্রেশন এনভায়রনমেন্ট বা কোড ফোর্জিং প্ল্যাটফর্মগুলোর জন্য ভবিষ্যতের পরিবর্তনের সাথে খাপ খাইয়ে নেওয়া সহজ করে তোলে।
ডিফল্ট কৌশল হিসাবে জ্যামিতিক রক্ষণাবেক্ষণ
পূর্ববর্তী সংস্করণগুলিতে, গিট তথাকথিত কৌশলটি চালু করেছিল। জ্যামিতিক মধ্যে git maintenanceবড় রিপোজিটরিগুলিতে রিপ্যাকিং কাজের খরচ কমানোর জন্য ডিজাইন করা এই কৌশলটি বিদ্যমান প্যাকফাইলগুলি বিশ্লেষণ করে এবং অবজেক্ট সংখ্যার দিক থেকে জ্যামিতিক অগ্রগতি গঠনকারী সংমিশ্রণগুলি খুঁজে বের করে, যার ফলে প্রতিবার সম্পূর্ণ গার্বেজ কালেকশন করার প্রয়োজন ছাড়াই সেগুলির বিষয়বস্তু সংকুচিত হয়।
গিট ২.৫৪-এর সাথে, এই পদ্ধতিটি হয়ে ওঠে ম্যানুয়াল রক্ষণাবেক্ষণের জন্য ডিফল্ট বিকল্পযখন এটি চলে git maintenance run কৌশল নির্দিষ্ট না করলে, সরাসরি চিরাচরিত কাজে না গিয়ে স্বয়ংক্রিয়ভাবে জ্যামিতিক পদ্ধতিটি বেছে নেওয়া হয়। gc যা সবকিছুকে একটি প্যাকেজের মধ্যে একত্রিত করার চেষ্টা করে।
অনুশীলনে, এর অর্থ এটি রিপোজিটরিগুলি আরও দক্ষতার সাথে রক্ষণাবেক্ষণ করা হয় শুরু থেকেই, এটি দীর্ঘ ইতিহাস সম্পন্ন প্রকল্প বা বৃহৎ মনোরিপোজিটরি পরিচালনাকারী সংস্থাগুলির জন্য বিশেষভাবে আকর্ষণীয়। জ্যামিতিক কৌশলটি যখন যুক্তিযুক্ত হয় তখন ইনক্রিমেন্টাল প্যাকেজগুলিকে একত্রিত করে এবং শুধুমাত্র একটিতে আশ্রয় নেয়। gc যখন এটি সবকিছুকে একটিমাত্র প্যাকফাইলে একত্রিত করবে, তখন এটি সম্পূর্ণ হবে। এই প্রক্রিয়া চলাকালীন, কমিট গ্রাফ, রেফলগ এবং অন্যান্য সহায়ক কাঠামো হালনাগাদ রাখা হয়।
যারা ইতিমধ্যে কনফিগার করেছিল maintenance.strategy = geometric তারা কোনো পরিবর্তন লক্ষ্য করবে না, কারণ সেই পছন্দকে সম্মান করা হয়। আর যারা প্রচলিত পদ্ধতিতেই চলতে পছন্দ করেন, তারা পারেন। কৌশলটি জোর করে চাপিয়ে দিন gc কনফিগার করা হচ্ছে maintenance.strategy = gcএর ফলে আরও রক্ষণশীল প্রবাহের সাথে সামঞ্জস্য বজায় থাকে।
ইন্টারেক্টিভ এবং পরীক্ষামূলক কমান্ডের উন্নতি
প্রধান নতুন বৈশিষ্ট্যগুলো ছাড়াও, গিট ২.৫৪ আরও বেশ কিছু পরিবর্তন এনেছে যার লক্ষ্য হলো... দৈনন্দিন ব্যবহারকারীর অভিজ্ঞতা উন্নত করুনবিশেষ করে সেইসব কমান্ডের ক্ষেত্রে যেগুলো পরিবর্তন ব্যবস্থাপনার জন্য ইন্টারেক্টিভভাবে ব্যবহৃত হয়।
git add -py new নেভিগেশন অপশনগুলিতে পরিমার্জন।
ইন্টারেক্টিভ মোড git add -p এবং সম্পর্কিত কমান্ডগুলিতে বিভিন্ন ব্যবহারযোগ্যতার উন্নতি করা হয়েছে। কী ব্যবহার করে হাঙ্কগুলির মধ্যে নেভিগেট করার সময় J y Kগিট এখন একটি ফ্র্যাগমেন্ট দেখাচ্ছে কিনা পূর্বে গৃহীত বা এড়িয়ে যাওয়া হয়েছেপ্রতিটি সিদ্ধান্ত হাতে-কলমে মনে রাখার ঝামেলা এড়ানো যায়।
বিকল্পটিও যোগ করা হয়েছে --no-auto-advanceযা ফাইলের কোনো অংশের কাজ শেষ করার পর এর আচরণ পরিবর্তন করে। স্বয়ংক্রিয়ভাবে পরবর্তী ফাইলে চলে যাওয়ার পরিবর্তে, সেশনটি বর্তমান ফাইলেই থেকে যায়, যা আপনাকে ব্যবহার করার সুযোগ দেয়। < y > ফাইলগুলোর মধ্যে আরও স্বচ্ছন্দে যাতায়াত করার জন্য। পরিবর্তনগুলো নিশ্চিত করার আগে সামগ্রিকভাবে পর্যালোচনা করতে চাইলে কাজের এই পদ্ধতিটি উপযোগী।
গিট রিপ্লে: কমিট পুনরায় কার্যকর করার ক্ষেত্রে আরও পরিপক্কতা
পরীক্ষামূলক ক্রম গিট রিপ্লেওয়ার্কিং ট্রি পরিবর্তন না করে একটি নতুন বেসে কমিট প্রতিলিপি করার জন্য ডিজাইন করা ফিচারটি ক্রমাগত তার সক্ষমতা বৃদ্ধি করছে। এই সংস্করণে, এটি এখন সম্পাদন করে... রেফারেন্সগুলি পারমাণবিকভাবে আপডেট করুন ডিফল্টরূপে, কমান্ড ডাম্প করার পরিবর্তে update-ref স্ট্যান্ডার্ড আউটপুট।
এছাড়াও, এটি একটি মোড অন্তর্ভুক্ত করে। --revert যে অনুমতি দেয় একাধিক কমিট থেকে পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনুনএটি প্রক্রিয়া চলাকালীন খালি হয়ে যাওয়া কমিটগুলো বাতিল করতে সক্ষম এবং এখন রুট কমিট পর্যন্ত হিস্ট্রি রিপ্লে করা সমর্থন করে। এই উন্নতিগুলো ব্যবহারের সাথে ভালোভাবে খাপ খায়। git historyযা আরও নিরাপদ অভিজ্ঞতা প্রদানের জন্য একই অবকাঠামোর উপর নির্ভর করে।
নতুন বিকল্প – গিট রিবেসে ট্রেইলার
আরেকটি আকর্ষণীয় পরিবর্তন হলো এর সংযোজন। --trailer en গিট রিবেসযা যুক্তির সুবিধা গ্রহণ করে interpret-trailers জন্য প্রতিটি ওভারশট কমিটে একই ট্রেইলার যোগ করুনদীর্ঘ কমান্ড তৈরি করার পরিবর্তে -x এবং ডাকে git commit --amend --no-edit --trailer=...ওভাররান চালু করার সময় আপনি সরাসরি কাঙ্ক্ষিত ট্রেইলারটি নির্দিষ্ট করে দিতে পারেন।
এর ফলে টাইপের সারি অন্তর্ভুক্ত করার মতো পুনরাবৃত্তিমূলক কাজগুলো অনেকাংশে সহজ হয়ে যায়। Reviewed-by: অথবা একাধিক কমিটের মতো অ্যানোটেশন, যা ডিস্ট্রিবিউটেড টিমে ব্যবহৃত আনুষ্ঠানিক কোড রিভিউ প্রক্রিয়ায় একটি সাধারণ বিষয়।
HTTP পরিবহন এবং স্বাক্ষর ব্যবস্থাপনা: আরও পরিমার্জিত আচরণ
নেটওয়ার্ক যোগাযোগের ক্ষেত্রে, Git 2.54 HTTP রেসপন্স পরিচালনা এবং কমিট ও ট্যাগের সাথে যুক্ত ক্রিপ্টোগ্রাফিক সিগনেচারের ব্যাখ্যার ক্ষেত্রে প্রাসঙ্গিক পরিবর্তন এনেছে।
HTTP 429 প্রতিক্রিয়া ব্যবস্থাপনা এবং কনফিগারযোগ্য পুনঃপ্রচেষ্টা
গিট-এর HTTP ট্রান্সপোর্ট কোডগুলোকে সঠিকভাবে ব্যাখ্যা করতে শেখে। ৪২৯ «অতিরিক্ত অনুরোধ»এখন পর্যন্ত, যখন কোনো সার্ভার 429 এরর দিত, তখন সেটিকে একটি মারাত্মক এরর হিসেবে গণ্য করা হতো এবং অপারেশনটি ব্যর্থ হতো। এই ভার্সন থেকে, Git হেডার ভ্যালুটি অক্ষুণ্ণ রেখে রিকোয়েস্টটি পুনরায় চেষ্টা করতে পারবে। Retry-After যদি উপস্থিত থাকে, অথবা নতুন বিকল্পের মাধ্যমে একটি কনফিগারযোগ্য বিলম্ব ব্যবহার করে http.retryAfter.
সমন্বয়গুলোও যোগ করা হয়। http.maxRetries y http.maxRetryTime, যা অনুমতি দেয় সর্বোচ্চ সংখ্যক পুনঃপ্রচেষ্টা এবং সেগুলিতে ব্যয়িত মোট সময় নিয়ন্ত্রণ করুন।এটি কর্পোরেট পরিবেশে কার্যকরী, যেখানে ওভারলোডেড সার্ভার বা কঠোর অনুরোধ সীমিতকরণ নীতিযুক্ত সার্ভারগুলিতে অ্যাক্সেসের প্রয়োজন হয়, যা কার্যক্রমকে সুবিন্যস্ত করতে সহায়তা করে। fetch y push সার্ভারকে ক্ষতিগ্রস্ত না করে আরও স্থিতিস্থাপক হোন।
মেয়াদোত্তীর্ণ কী দিয়ে GPG স্বাক্ষর পরিচালনা করা
নিরাপত্তার বিষয়ে, একটি সম্ভাব্য বিভ্রান্তিকর আচরণ সংশোধন করা হয়েছে: যখন কোনো কমিট এমন একটি GPG কী দিয়ে স্বাক্ষরিত হতো যার মেয়াদ পরবর্তীতে শেষ হয়ে যেত, তখন Git সেই স্বাক্ষরটি প্রদর্শন করত। একটি উদ্বেগজনক লাল রঙএর থেকে বোঝা যায় যে স্বাক্ষরটি অবৈধ ছিল। তবে, যদি স্বাক্ষরটি সেই সময়ে বৈধ হয়ে থাকে, তাহলে কী-টির মেয়াদ শেষ হয়ে গেলেও সেই বৈধতা বজায় থাকার কথা।
গিট ২.৫৪ এই যুক্তিটি সংশোধন করে এবং আরও বিবেচনা করে। কী-এর মেয়াদ শেষ হওয়ার আগে সঠিকভাবে করা স্বাক্ষরগুলো বৈধ।এর ফলে অপ্রয়োজনীয় অ্যালার্ট এড়ানো যায়। এটি রিপোজিটরির ইতিহাসের একটি আরও সঠিক চিত্র প্রদান করে, যা দীর্ঘ জীবনচক্রের প্রকল্পগুলির জন্য প্রাসঙ্গিক, যেমন প্রাতিষ্ঠানিক বা জনপ্রশাসন সফটওয়্যার যা বহু বছর ধরে রক্ষণাবেক্ষণ করা হয়।
নতুন পরিদর্শন ক্ষমতা এবং ইতিহাস কাস্টমাইজেশন
ইতিহাস অনুসন্ধানের জন্য তৈরি করা বেশ কিছু কমান্ডে উন্নতি সাধন করা হয়েছে, যা সেগুলোর নমনীয়তা বাড়ায় এবং প্রতিটি ক্ষেত্রের জন্য আরও সুনির্দিষ্ট আউটপুট প্রদানের সুযোগ করে দেয়।
`git log -L` স্ট্যান্ডার্ড ডিফ মেকানিজমের সাথে একীভূত হয়।
বিকল্প git log -Lএকটি নির্দিষ্ট ফাইলের একাধিক লাইনের বিবর্তন ট্র্যাক করার ফাংশনটির আউটপুটকে এর মাধ্যমে রাউট করার জন্য পুনরায় বাস্তবায়ন করা হয়েছে। স্ট্যান্ডার্ড গিট ডিফ মেকানিজমপূর্বে, এটি নিজস্ব পথ ব্যবহার করত, যার ফলে এটি অত্যন্ত দরকারি বিকল্পগুলির সাথে বেমানান ছিল, যেমন -S y -G (তথাকথিত 'পিক্যাক্স'), অথবা বিভিন্ন প্যাচ ফরম্যাট সহ।
গিট ২.৫৪-এ প্রবর্তিত পরিবর্তনের ফলে, -L এর সাথে সামঞ্জস্যপূর্ণ হয়ে ওঠে উন্নত বিষয়বস্তু এবং বিভিন্ন ফরম্যাট অনুসন্ধান, সহ সহ --word-diff o --color-movedএইভাবে, আউটপুটকে একটি নির্দিষ্ট ফাংশনে সীমাবদ্ধ করা যায় এবং একই সাথে শুধুমাত্র সেইসব কমিটের জন্য ফিল্টার করা যায় যেগুলো একটি নির্দিষ্ট সিম্বল যোগ বা অপসারণ করে, যা কোড অডিট এবং রিগ্রেশন অ্যানালাইসিসকে সহজতর করে।
ডিফ অ্যালগরিদম নির্বাচনের সাথে গিট ব্লেম
কমান্ড গিট ব্লেমফাইলের প্রতিটি লাইন কোন কমিট থেকে এসেছে তা দেখতে ব্যবহৃত হয়, একটি নতুন অপশন শেখে। --diff-algorithmএর মাধ্যমে লাইন অ্যাট্রিবিউশন গণনা করার সময় আপনি হিস্টোগ্রাম, পেশেন্স বা মিনিমালের মতো বিভিন্ন ডিফারেন্স অ্যালগরিদমের মধ্যে থেকে বেছে নিতে পারেন।
ফাইলটিতে কী ধরনের পরিবর্তন হয়েছে তার ওপর নির্ভর করে, একটি অ্যালগরিদমের পরিবর্তে অন্যটি বেছে নিলে আরও স্পষ্ট ফলাফল পাওয়া যেতে পারে।এটি অত্যন্ত সক্রিয় কোড হিস্টোরিতে থাকা অপ্রয়োজনীয় তথ্য কমিয়ে দেয়। যেসব পরিবেশে বিস্তারিত পর্যালোচনাকে অত্যন্ত গুরুত্ব দেওয়া হয়, সেখানে কোনো নির্দিষ্ট কোড ব্লক কে যুক্ত করেছে তা তদন্ত করার ক্ষেত্রে এই স্তরের নিয়ন্ত্রণ একটি বড় পার্থক্য গড়ে দিতে পারে।
স্টোরেজ অপ্টিমাইজেশন এবং অবজেক্ট ডেটাবেস
এই সংস্করণের পরিবর্তনগুলো শুধু ইউজার ইন্টারফেসেই সীমাবদ্ধ নয়; গিট যেভাবে কাজ করে, তার উপরেও উল্লেখযোগ্য কাজ করা হয়েছে। অভ্যন্তরীণভাবে ডেটা সংগঠিত করে এবং অ্যাক্সেস করেএর একটি বিশেষভাবে উল্লেখযোগ্য প্রভাব রয়েছে বৃহৎ রিপোজিটরিগুলোর উপর।
ক্রমবর্ধমান মাল্টি-প্যাক সূচক এবং সংকোচন
কল মাল্টি-প্যাক ইনক্রিমেন্টাল ইনডেক্স (MIDX)পূর্ববর্তী সংস্করণগুলিতে ইতিমধ্যে উন্নত করা বৈশিষ্ট্যগুলির পাশাপাশি, Git 2.54-এ এখন লেয়ার কম্প্যাকশনের জন্য সমর্থন অন্তর্ভুক্ত করা হয়েছে। এই পদ্ধতিটি ছোট MIDX লেয়ারগুলিকে, তাদের সংশ্লিষ্ট রিচেবিলিটি বিটম্যাপ সহ, একত্রিত করে লেয়ার চেইনকে একটি যুক্তিসঙ্গত আকারে রাখে।
এই পদক্ষেপটি গুরুত্বপূর্ণ কারণ দীর্ঘস্থায়ী রিপোজিটরিগুলিতে ইনক্রিমেন্টাল MIDX-কে বাস্তবসম্মত করে তোলাযেমন বহু বছরের ইতিহাস সম্পন্ন বৃহৎ সংস্থা বা সামাজিক প্রকল্প। স্তরগুলোকে সংকুচিত করলে অনুসন্ধানের জটিলতা কমে এবং নিম্নলিখিত ক্রিয়াকলাপগুলিতে কর্মক্ষমতা উন্নত হয়, যেমন fetch, clone আংশিক বা ঐতিহাসিক পরিদর্শন।
অবজেক্ট ডেটাবেস (ODB) পুনর্গঠন
অভ্যন্তরীণভাবে, একটি অবজেক্ট ডাটাবেস এপিআই-এর গভীর পুনর্গঠন (ODB)। এখন একটি প্লাগেবল ব্যাকএন্ড ডিজাইন ব্যবহার করা হয়, যেখানে ফাংশনগুলো যেমন read_object(), write_object() o for_each_object() এগুলো অরিজিন দ্বারা ফাংশন পয়েন্টার ব্যবহার করে প্রেরণ করা হয়।
যদিও এই পরিবর্তনটি শেষ ব্যবহারকারীর কাছে তাৎক্ষণিকভাবে দৃশ্যমান নয়, এটি ভিত্তি স্থাপন করে ভবিষ্যতের বিকল্প স্টোরেজ ব্যাকএন্ড অথবা আরও নমনীয় অবজেক্ট ডেটাবেস কনফিগারেশন। যেসব কোম্পানির নির্দিষ্ট নিয়ন্ত্রক সম্মতি সংক্রান্ত প্রয়োজনীয়তা রয়েছে বা যারা তাদের নিজস্ব স্টোরেজ সিস্টেমের সাথে ইন্টিগ্রেশন করতে চায়, তাদের জন্য এই মডুলারিটি আরও উপযোগী সমাধানের পথ খুলে দিতে পারে।
স্ট্যাটাস, অ্যালিয়াস, ব্যাকফিল এবং অন্যান্য বিবরণে উন্নতি
গিট ২.৫৪-এ আরও বেশ কিছু ছোটখাটো পরিবর্তন আনা হয়েছে, যা দৈনন্দিন ব্যবহারকে আরও উন্নত করতে এবং গিটকে বিভিন্ন ভাষাগত ও নেটওয়ার্ক প্রেক্ষাপটের সাথে খাপ খাইয়ে নিতে সাহায্য করে।
গিট স্ট্যাটাস এবং একাধিক রিমোট ব্রাঞ্চের সাথে এর তুলনা
কমান্ড git অবস্থা কনফিগারেশন বিকল্পটি চালু করে status.compareBranchesডিফল্টরূপে, এই কমান্ডটি দেখাতো যে বর্তমান ব্রাঞ্চটি তার কনফিগার করা আপস্ট্রিমের তুলনায় কেমন, যা সাধারণত এইরকম: origin/mainনতুন বিকল্পটির মাধ্যমে, আপনি পুশ ব্রাঞ্চের সাথে, অথবা একই সাথে উভয়ের সাথেই তুলনা করার অনুরোধ করতে পারবেন।
এই কার্যকারিতাটি ডিজাইন করা হয়েছে ত্রিভুজাকার প্রবাহফর্ক নিয়ে কাজ করার সময় এটি একটি সাধারণ বিষয়: আপনি একটি অফিসিয়াল রিমোট থেকে ডাউনলোড করে অন্য একটিতে পরিবর্তনগুলো পাঠাতে পারেন এবং প্রতিটি ব্রাঞ্চের মধ্যে কতগুলো কমিট রয়েছে তা সবসময় পরিষ্কার রাখতে পারেন, যা রিপোজিটরি সিনক্রোনাইজ করার সময় অপ্রত্যাশিত পরিস্থিতি কমিয়ে দেয়।
আন্তর্জাতিক অক্ষর সহ ছদ্মনাম
এখন পর্যন্ত, গিট অ্যালিয়াসগুলো শুধুমাত্র ASCII অ্যালফানিউমেরিক অক্ষর এবং হাইফেনের মধ্যে সীমাবদ্ধ ছিল, যার ফলে অ্যাকসেন্ট বা ভিন্ন বর্ণমালাযুক্ত অন্যান্য ভাষার নাম ব্যবহার করা যেত না। নতুন সিনট্যাক্সটি লাইন ব্রেক এবং NUL ছাড়া কার্যত যেকোনো অক্ষর সমর্থন করে। ম্যাচিং করা হয় র বাইট হিসেবে এবং এটি কেস-সেনসিটিভ। এছাড়াও, এই অ্যালিয়াসগুলো পরিচালনা করার জন্য শেল অটোকমপ্লিট সিস্টেমটি আপডেট করা হয়েছে, যা বহুভাষী দলগুলোতে গিট ব্যবহারকে আরও সহজ করে তুলেছে।
আংশিক ক্লোনের ক্ষেত্রে গিট ব্যাকফিল বেশি ব্যবহারিক।
পরীক্ষামূলক কমান্ড গিট ব্যাকফিলআংশিক ক্লোনগুলিতে অনুপস্থিত ব্লব ডাউনলোড করার জন্য ব্যবহৃত কমান্ডটিও শক্তিশালী করা হচ্ছে। পূর্বে, কমান্ডটি সর্বদা পৌঁছানো যায় এমন ব্লবগুলি পুনরুদ্ধার করত। HEAD সম্পূর্ণ ট্রি জুড়ে, যা বিশেষভাবে বড় রিপোজিটরিগুলোর ক্ষেত্রে অতিরিক্ত হতে পারে।
গিট ২.৫৪ এর জন্য সমর্থন যোগ করে আর্গুমেন্ট এবং পাথস্পেক পর্যালোচনা করুনযাতে ব্যাকফিলকে হিস্টোরির একটি পরিসরের মধ্যে সীমাবদ্ধ রাখা যায় (উদাহরণস্বরূপ, main~100..main) অথবা নির্দিষ্ট কিছু রুটে (git backfill -- '*.c'), যার মধ্যে ওয়াইল্ডকার্ড প্যাটার্নও অন্তর্ভুক্ত। এর ফলে বড় আকারের আংশিক ক্লোন নিয়ে কাজ করা অনেক বেশি সহজ হয়ে যায়, যেখানে আপনাকে কেবল কোডের একটি নির্দিষ্ট অংশের ইতিহাস সম্পূর্ণ করতে হয়।
অন্যান্য সমন্বয় এবং বিস্তারিত উন্নতি
গিট ২.৫৪-এর চেঞ্জলগে ছোটখাটো উন্নতির একটি দীর্ঘ তালিকা রয়েছে। এর মধ্যে ডিফারেন্স অ্যালগরিদমের একটি সমাধানও অন্তর্ভুক্ত। বারলেখযা এখন কম্প্যাকশন পর্যায়কে পরিবর্তনসমূহের সমষ্টিকে এমনভাবে স্থানান্তরিত করা থেকে বিরত রাখে যাতে নির্বাচিত অ্যাঙ্কর লাইনগুলো ভেঙে যায়, ফলে আরও পরিচ্ছন্ন এবং কম অপ্রয়োজনীয় ডিফ তৈরি হয়।
সরঞ্জাম যেমন git config list যা কনফিগারেশন তালিকাভুক্ত করার আনুষ্ঠানিক পদ্ধতি হিসেবে প্রতিষ্ঠিত হচ্ছে, git merge-file যা রিপোজিটরির বাইরেও উপলব্ধ কনফিগারেশনকে সম্মান করে, এবং এর সাথে সম্পর্কিত বেশ কিছু ইউটিলিটি। git send-emailযেগুলো ক্লায়েন্ট সার্টিফিকেটের জন্য সমর্থন লাভ করে এবং ব্যবহারকারী-নির্বাচিত ক্যারেক্টার সেটগুলোকে আরও সতর্কতার সাথে পরিচালনা করে।
সংস্করণ ২.৫৪-এর মাধ্যমে গিট-এর বিবর্তন ভালো গতিতে অব্যাহত রয়েছে, যা সমন্বয় করে ব্যবহারকারীর জন্য দৃশ্যমান উন্নতিনতুন ব্যবস্থার মতো git history অথবা কনফিগারযোগ্য হুক, যার জন্য সিস্টেমের অভ্যন্তরীণ অবকাঠামোতে উল্লেখযোগ্য কাজ করার প্রয়োজন হয়। এই সবকিছুই একটি আরও শক্তিশালী ও নমনীয় ইকোসিস্টেমের দিকে ইঙ্গিত করে, যা ক্রমবর্ধমান বড় রিপোজিটরি এবং আরও বৈচিত্র্যময় টিমের চ্যালেঞ্জ মোকাবেলায় আরও ভালোভাবে প্রস্তুত।
