Git রিপজিটরি — প্রকল্পের সোর্স কোডের ভাণ্ডার, যেখানে Git ডেভেলপমেন্ট জুড়ে ফাইলের প্রতিটি পরিবর্তন ট্র্যাক করে। রিপজিটরিতে কমিট, ব্রাঞ্চ এবং ট্যাগের সম্পূর্ণ ইতিহাস থাকে, যা ডেভেলপারদের কোডে একসাথে কাজ করতে দেয়। Git, 2024 অনুসারে, রিপজিটরি যেকোনো ভার্সন কন্ট্রোল সিস্টেমের ভিত্তি এবং সারা বিশ্বের লক্ষ লক্ষ প্রকল্পে ব্যবহৃত হয়।
মূল বিষয়
Git রিপজিটরি — একটি ডেটা স্ট্রাকচার যেখানে ভার্সন কন্ট্রোল সিস্টেম প্রকল্প ফাইলের পরিবর্তনের ইতিহাস বর্ণনাকারী মেটাডেটা এবং অবজেক্ট সংরক্ষণ করে। যখন একজন ডেভেলপার git init কমান্ড দিয়ে রিপজিটরি ইনিশিয়ালাইজ করে, Git প্রকল্প রুটে একটি লুকানো ফোল্ডার .git তৈরি করে।
এই ফোল্ডারের ভিতরে সিস্টেমের কাজ করার জন্য প্রয়োজনীয় সমস্ত অবজেক্ট, রেফারেন্স এবং কনফিগারেশন ফাইল থাকে। রিপজিটরি কোনো নির্দিষ্ট অবস্থানের সাথে বাঁধা নয় — ডেভেলপার এটি স্থানীয়ভাবে তৈরি করে পরে একটি রিমোট সার্ভারের সাথে লিঙ্ক করতে পারে।
Git একটি বিতরণকৃত রিপজিটরি মডেল ব্যবহার করে: প্রকল্পের প্রতিটি সদস্যের নিজের কম্পিউটারে ইতিহাসের সম্পূর্ণ কপি থাকে। এর মানে হল যে বেশিরভাগ অপারেশন — কমিট, ইতিহাস দেখা, ব্রাঞ্চ তৈরি করা — সার্ভারের সাথে যোগাযোগ না করেই স্থানীয়ভাবে সম্পাদিত হয়।
Git ডকুমেন্টেশন অনুসারে, বিতরণকৃত আর্কিটেকচার সিস্টেমকে ত্রুটি-সহনশীল করে তোলে: যদি সার্ভার ডাউন হয়, যেকোনো লোকাল রিপজিটরি প্রকল্পের সম্পূর্ণ ইতিহাস পুনরুদ্ধারের উৎস হতে পারে।
লোকাল রিপজিটরি — ডেভেলপারের কম্পিউটারে প্রকল্পের একটি কপি। এতে কমিট, ব্রাঞ্চ এবং ট্যাগের সম্পূর্ণ ইতিহাস থাকে এবং নেটওয়ার্ক সংযোগ ছাড়াই commit, branch, merge এবং rebase অপারেশন করতে দেয়।
রিমোট রিপজিটরি — সার্ভারে হোস্ট করা হয় এবং টিমের সকল সদস্যের জন্য সিঙ্ক্রোনাইজেশন পয়েন্ট হিসেবে কাজ করে। ডেভেলপাররা git push কমান্ড দিয়ে তাদের পরিবর্তন পাঠায় এবং git pull কমান্ড দিয়ে অন্যদের পরিবর্তন নেয়।
লোকাল এবং রিমোট রিপজিটরির মধ্যে সংযোগ remote origin — Git কনফিগারেশনে সংরক্ষিত সার্ভার URL — এর মাধ্যমে কনফিগার করা হয়। একটি লোকাল রিপজিটরি একাধিক রিমোটের সাথে লিঙ্ক করা যেতে পারে, যা ফোর্কের সাথে কাজ করার সময় উপযোগী।
এই মডেলের প্রধান সুবিধা হল ডেভেলপার অফলাইন মোডে কোডে কাজ করতে পারে এবং ফলাফল পাঠাতে প্রস্তুত হলে শুধুমাত্র তখনই পরিবর্তন সিঙ্ক্রোনাইজ করতে পারে।
| বৈশিষ্ট্য | লোকাল | রিমোট |
|---|---|---|
| অবস্থান | ডেভেলপারের কম্পিউটারে | সার্ভারে (GitHub, GitLab) |
| নেটওয়ার্ক ছাড়া প্রবেশ | সকল অপারেশনে পূর্ণ প্রবেশ | সংযোগ ছাড়া অনুপলব্ধ |
| সিঙ্ক্রোনাইজেশন | রিমোটের সাথে Push/Pull | লোকাল থেকে push গ্রহণ করে |
| ব্যাকআপ | ডেটা ক্ষতি থেকে সুরক্ষিত নয় | ব্যাকআপসহ সার্ভারে সংরক্ষিত |
Git-এর স্টোরেজ মডেল অন্যান্য ভার্সন কন্ট্রোল সিস্টেম থেকে মৌলিকভাবে ভিন্ন। সংস্করণগুলোর মধ্যে পরিবর্তনের তালিকা (ডেল্টা) সংরক্ষণ না করে, Git প্রতিটি কমিটের সময় প্রকল্পের সব ফাইলের সম্পূর্ণ স্ন্যাপশট সংরক্ষণ করে।
রিপজিটরির প্রতিটি অবজেক্ট একটি অনন্য ৪০-অক্ষরের SHA-1 হ্যাশ দ্বারা চিহ্নিত করা হয়। যদি ফাইলের বিষয়বস্তু কমিটের মধ্যে পরিবর্তিত না হয়, Git নতুন অবজেক্ট তৈরি করে না বরং বিদ্যমানটি পুনরায় ব্যবহার করে — এটি জায়গা বাঁচায়।
Git চার ধরনের অবজেক্ট ব্যবহার করে: blob (ফাইল বিষয়বস্তু), tree (ডিরেক্টরি কাঠামো), commit (মেটাডেটাসহ স্ন্যাপশট) এবং tag (কমিটের নামকরণকৃত রেফারেন্স)। সব অবজেক্ট .git/objects ফোল্ডারে সংরক্ষিত হয়।
Git Internals অনুসারে, Git-এর অবজেক্ট মডেল ডেটা অখণ্ডতা নিশ্চিত করে: ফাইল বিষয়বস্তুর যেকোনো পরিবর্তন নতুন হ্যাশ তৈরি করে, যা ইতিহাসে অলক্ষিত পরিবর্তন করা অসম্ভব করে তোলে।
.git ফোল্ডার হল রিপজিটরির হৃদয়। এটি ছাড়া Git পরিবর্তন ট্র্যাক করতে পারে না, এবং সাধারণ ডিরেক্টরি শুধু ফাইলের একটি সংগ্রহ থাকে। এই ফোল্ডারের কাঠামো বোঝা রিপজিটরি সমস্যা নির্ণয়ে সহায়তা করে।
HEAD ফাইলটি বিশেষ মনোযোগের দাবি রাখে। সাধারণ অবস্থায় এতে একটি ব্রাঞ্চের প্রতীকী রেফারেন্স থাকে, যেমন ref: refs/heads/main। detached HEAD অবস্থায় এটি সরাসরি একটি কমিট নির্দেশ করে — এর মানে নতুন কমিট কোনো ব্রাঞ্চের সাথে সংযুক্ত হবে না।
Git রিপজিটরি নিয়ে কাজ করার জন্য মৌলিক অপারেশনের একটি সেট অন্তর্ভুক্ত যা ডেভেলপার প্রতিদিন করে। প্রতিটি অপারেশন নতুন অবজেক্ট যোগ করে বা রেফারেন্স সরিয়ে রিপজিটরির অবস্থা পরিবর্তন করে।
push এবং pull অপারেশনই একমাত্র যেগুলোর জন্য রিমোট সার্ভারের সাথে সংযোগ প্রয়োজন। অন্যান্য সব অপারেশন সম্পূর্ণরূপে স্থানীয়ভাবে সম্পাদিত হয়, যা বড় ইতিহাসের পরিমাণেও উচ্চ গতি নিশ্চিত করে।
রিপজিটরির প্রতিটি ফাইল চারটি অবস্থার মধ্য দিয়ে যায়: untracked (ট্র্যাক না করা), modified (পরিবর্তিত), staged (প্রস্তুত) এবং committed (কমিটকৃত)। Git শুধুমাত্র সেই ফাইলগুলোকেই ট্র্যাক করে যা git add-এর মাধ্যমে স্পষ্টভাবে যোগ করা হয়েছে বা যা ইতিমধ্যে কমিট ইতিহাসে আছে।
এই মডেল বোঝাই Git-এর সাথে কার্যকরভাবে কাজ করার চাবিকাঠি। ডেভেলপার বাছাই করে শুধুমাত্র পরিবর্তিত ফাইলের একটি অংশ কমিটের জন্য প্রস্তুত করতে পারে, স্পষ্ট বিবরণ সহ লজিক্যালি সম্পূর্ণ কমিট তৈরি করতে পারে।
রিমোট রিপজিটরি সাধারণত বিশেষায়িত প্ল্যাটফর্মে হোস্ট করা হয় যা ওয়েব ইন্টারফেস, অ্যাক্সেস ম্যানেজমেন্ট সিস্টেম এবং সহযোগিতামূলক ডেভেলপমেন্টের জন্য অতিরিক্ত টুল সরবরাহ করে।
প্ল্যাটফর্মের পছন্দ টিমের আকার, গোপনীয়তার প্রয়োজনীয়তা এবং প্রয়োজনীয় ইন্টিগ্রেশনের উপর নির্ভর করে। মোবাইল ডেভেলপমেন্টের জন্য প্রায়শই GitHub বেছে নেওয়া হয় এর বিস্তৃত কমিউনিটি সমর্থন এবং iOS ও Android-এর জন্য CI/CD টুলের সাথে ইন্টিগ্রেশনের কারণে।
একটি ব্যবহারিক পরিস্থিতি বিবেচনা করি: একজন ডেভেলপার বিদ্যমান রিপজিটরি ক্লোন করে, একটি নতুন ব্রাঞ্চ তৈরি করে, পরিবর্তন করে এবং সেগুলো সার্ভারে পাঠায়। প্রতিটি কমান্ড রিপজিটরির বিভিন্ন উপাদানের সাথে কাজ প্রদর্শন করে।
# একটি রিমোট রিপজিটরি ক্লোন করা
git clone https://github.com/user/mobile-app.git
# প্রকল্প ডিরেক্টরিতে নেভিগেট করা
cd mobile-app
# একটি নতুন ফিচার ব্রাঞ্চ তৈরি করে তাতে স্যুইচ করা
git checkout -b feature/auth
# পরিবর্তিত ফাইলের অবস্থা পরীক্ষা করা
git status
# সব পরিবর্তন স্টেজিং এরিয়ায় যোগ করা
git add .
# বিবরণ সহ একটি কমিট তৈরি করা
git commit -m "Add authentication module"
# রিমোট রিপজিটরিতে পরিবর্তন পাঠানো
git push origin feature/auth
git status কমান্ডটি দৈনন্দিন কাজে সবচেয়ে উপযোগী কমান্ডগুলোর একটি। এটি দেখায় কোন ফাইল পরিবর্তিত হয়েছে, কোনটি কমিটের জন্য প্রস্তুত এবং কোনটি Git দ্বারা একেবারেই ট্র্যাক করা হচ্ছে না।
রিপজিটরি ইতিহাস বিশ্লেষণের জন্য git log কমান্ড বিভিন্ন ফর্ম্যাটিং ফ্ল্যাগ সহ ব্যবহার করা হয়। এটি কমিটের কালানুক্রম, তাদের লেখক, তারিখ এবং SHA-1 শনাক্তকারী প্রদর্শন করে।
# ব্রাঞ্চ গ্রাফ ভিজুয়ালাইজেশনসহ ইতিহাস দেখা
git log --oneline --graph --all
# একটি নির্দিষ্ট কমিটে পরিবর্তন দেখা
git show a1b2c3d
# বর্তমান অবস্থা শেষ কমিটের সাথে তুলনা করা
git diff HEAD
# একটি নির্দিষ্ট ফাইলের ইতিহাস দেখা
git log --follow src/MainActivity.kt
--graph ফ্ল্যাগ ব্রাঞ্চিং-এর ASCII গ্রাফ প্রদর্শন করে, যা একাধিক ব্রাঞ্চে সক্রিয় কাজ সহ রিপজিটরিতে বিশেষভাবে উপযোগী। ঘন ঘন রিলিজযুক্ত মোবাইল প্রকল্পের জন্য, ভিজুয়াল গ্রাফ ডেভেলপমেন্ট কাঠামো দ্রুত মূল্যায়ন করতে সাহায্য করে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
রিপজিটরি পরিবর্তনের ইতিহাসসহ কোডের একটি প্রযুক্তিগত ভাণ্ডার। প্রকল্প একটি বিস্তৃত ধারণা যা রিপজিটরি, টাস্ক ম্যানেজমেন্ট সিস্টেম, ডকুমেন্টেশন এবং ডেভেলপমেন্ট প্রক্রিয়া অন্তর্ভুক্ত করে। একটি প্রকল্পে একাধিক রিপজিটরি থাকতে পারে।
New বাটনে ক্লিক করে GitHub ওয়েব ইন্টারফেসের মাধ্যমে একটি নতুন রিপজিটরি তৈরি করুন। নাম, বিবরণ এবং অ্যাক্সেস স্তর নির্দিষ্ট করুন। তারপর রিপজিটরিটি লোকাল মেশিনে ক্লোন করুন বা git remote add origin-এর মাধ্যমে বিদ্যমান লোকাল রিপজিটরির সাথে লিঙ্ক করুন।
যদি রিমোট রিপজিটরি সার্ভার থেকে মুছে ফেলা হয় কিন্তু অন্তত একজন ডেভেলপারের কাছে লোকাল কপি থাকে, তাহলে রিপজিটরি পুনরুদ্ধার করা যাবে। শুধু একটি নতুন রিমোট রিপজিটরি তৈরি করুন এবং সম্পূর্ণ ইতিহাসসহ লোকাল কপি থেকে git push --force নির্বাহ করুন।
ফোর্ক হল আপনার অ্যাকাউন্টে অন্য কারও রিপজিটরির একটি কপি। আপনি ইতিহাসের সম্পূর্ণ কপি পান এবং মূলকে প্রভাবিত না করেই যেকোনো পরিবর্তন করতে পারেন। ফোর্ক Pull Request-এর মাধ্যমে ওপেন-সোর্স প্রকল্পে অংশগ্রহণের জন্য ব্যবহৃত হয়।
অবজেক্ট কম্প্রেস এবং অপ্রাপ্য ডেটা অপসারণ করতে git gc ব্যবহার করুন। git filter-branch বা git filter-repo-এর মাধ্যমে ইতিহাস থেকে বড় ফাইল সরান। বাইনারি ফাইলযুক্ত প্রকল্পের জন্য Git LFS (Large File Storage) বিবেচনা করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন