Git Conflict

Asfak AhmedAsfak Ahmed
4 min read

গিট কনফ্লিক্ট কি?

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

গিট কনফ্লিক্ট কিভাবে তৈরি হয়?

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

গিট কনফ্লিক্ট হলে কি এমন ক্ষতি হয়?

গিট কনফ্লিক্ট খুব সেন্সিটিভ একটি বিষয়। গিট কনফ্লিক্ট এর কারনে আপনার অনেক দিনের কোড ডিলিট হয়ে যেতে পারে। অথবা আপনি আজকে কিছু একটা কোডে যুক্ত করছেন কিন্তু গিট কনফ্লিক্ট হইছে আর আপনি সেটা ভালোভাবে সল্ভ করতে পারেন নি তার জন্য আপনার করা ওই প্রোগ্রামটি ডিলিট হয়ে যেতে পারে। তাই কোডে গিট কনফ্লিক্ট দেখা দিলে সেটা খুব ভালোভাবে সল্ভ করা হয় বুঝে বুঝে, তা না হলে দেখা যায় আপনি কনফ্লিক্ট সল্ভ করে ফেলছেন আপনার কোড ঠিকঠাক রয়েছে কিন্তু আরেকজনের করা কোন একটি কোড ডিলিট হয়ে গেছে আপনার করা ভুল কনফ্লিক্ট সল্ভে। নিজের করা প্রোজেক্টে এটি তেমন কোন সমস্যা তৈরি না ও করতে পারে কিন্তু যখন আপনি কম্পানির কাজ করবেন অথবা ক্লাইন্ট কাজ করবেন তখন এই কনফ্লিক্ট আপনার জন্য অনেক বড় সমস্যা তৈরি করতে পারে। কেননা, অনেক সময় দেখা যায় ঠিকমতো কনফ্লিক্ট সল্ভ না করার কারনে ২-৩ দিনের করা কাজের কোড ডিলিট হয়ে যায়। আর কোড একবার ডিলিট হয়ে গেলে সেটা আবার শুরু থেকে করতে হবে। তাই গিট কনফ্লিক্ট খুব সেন্সিটিভ একটি বিষয়।

কিভাবে গিট কনফ্লিক্ট সল্ভ করা হয়?

আমরা সাধারণত কোড ইডিটরে ( vs code ) কনফ্লিক্ট মারজ করে থাকি কারণ ইডিটরে ভিজুয়াল ভাবে দেখে মারজ করা যায়। যখন একটি ফাইলে কনফ্লিক্ট তৈরি হয় তখন আপনার প্রোজেক্টের ওই সেকশনে অথবা ফাইলে ইরর তৈরি হয় ( যতক্ষণ না আপনি কনফ্লিক্ট সল্ভ করবেন )। নিচে একটি ছবি যক্ত করা হয়েছেঃ

ছবিতে উপরের দিকে আপনি কয়েকটি অপশন ( accept current changes, accept incoming changes, accept both changes etc.... ) দেখতে পাচ্ছেন। এগুলোর মাধ্যমে আপনি কনফ্লিক্ট সল্ভ করবেন। এখানে দেখবেন যে দুইটি সেকশনে কোড দেওয়া থাকবে যেমনটি নিচের ছবিতে দেখানো হয়েছেঃ

উপরের সেকশনটি হচ্ছে আপনার current changes ( আপনি যে কোডগুলো লিখেছেন বা চেঞ্জ করেছেন ) HEAD এর পাশে লিখা আছে যে current change ( মানে আপনার করা কোড এইগুলো ) আর নিচের সেকশনটি হচ্ছে incoming changes ( আপনি যার ব্রাঞ্চের সাথে কোড মারজ করবেন তার কোডগুলো ) Them এর পাশে লিখা আছে যে incoming change ( মানে যে পরিবর্তন অথবা কোডগুলো আসবে )।

এখন আপনি যদি accept current changes বাটনে ক্লিক করেন তাহলে আপনি যে কোডগুলো লিখেছেন সেগুলো থেকে যাবে এবং যে ব্রাঞ্চের সাথে মারজ করতে চাচ্ছেন সে ব্রাঞ্চের কোডগুলো রিমুব হয়ে যাবে ওই সেকশন থেকে আর যদি accept incoming changes বাটনে ক্লিক করেন তাহলে যে ব্রাঞ্চের সাথে কোড মারজ করতে চাচ্ছেন সে ব্রাঞ্চের কোডগুলো থেকে যাবে আর আপনার ওই কোডগুলো রিমুব হয়ে যাবে ওই সেকশনের জন্য আর যদি আপনি accept both changes বাটনে ক্লিক করেন তাহলে আপনার কোড এবং আপনি যে ব্রাঞ্চের সাথে কোড মারজ করতে চাচ্ছেন সেই ব্রাঞ্চের কোডগুলোও থাকবে ওই সেকশনের মধ্যে ( মানে দুইজনের কোড থাকবে )। accept both changes এর ক্ষেত্রে কিছু ঝামেলা তৈরি হয় সেটা হচ্ছে কোড ডোপলিকেট হয়ে যায় অনেক জায়গায়। কারণ আপনি দুইটি কোডই রাখছেন এই জন্যই যেখানে যেখানে একসাথে ১ এর অধিক লোক কাজ করেছেন পরিবর্তন করেছেন সেখানে সেখানে সব পরিবর্তন থেকে যাবে। আপনারটি ও থাকবে এবং অন্যজনেরটি ও থাকবে যার জন্য কোড ডোপলিকেট হয়ে যাবে এবং ইরর দেখাবে।

তাই গিট কনফ্লিক্ট সল্ভ করার জন্য আপনি accept current changes অথবা accept incoming changes এই দুইটি দিয়ে সল্ভ করবেন। যখন যেই জায়গায় নিজের রাখার প্রয়োজন বলে মনে করছেন সেই জায়গায় accept current changes বাটনে ক্লিক করে দিবেন তাহলে আপনার কোডগুল থেকে যাবে এবং যখন দেখছেন যে আপনার কোড লাগবে না আগের যেটা ছিলো কোড বা যে কোড আসতেছে সেটা রাখার প্রয়োজন তখন accept incoming changes বাটনে ক্লিক করলে যে কোডগুলো আসতেছে সেগুলো থেকে যাবে আর আপনার কোন কোড থাকলে সেটা ডিলিট হয়ে যাবে।

এইভাবে করে সম্পূর্ণ কনফ্লিক্ট সল্ভ করতে হবে। এটায় অনেক টাইম লাগে এবং এটা টাইম নিয়ে করতেও হয় ভালোভাবে বুঝে শুনে।

গিট কনফ্লিক্ট না হওয়া থেকে কি বাঁচা সম্ভব?

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

0
Subscribe to my newsletter

Read articles from Asfak Ahmed directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Asfak Ahmed
Asfak Ahmed

I'm Asfak Ahmed, a Front-End Developer with 2+ years of experience, currently enhancing user experiences at Doplac CRM. As the founder of ZenUI Library, I focus on creating intuitive, user-centric interfaces. My passion lies in blending creativity with technology to craft impactful digital solutions.