10 Working with Version Control Git & GitHub
ভার্সন কন্ট্রোল কি? (What is version control)
যে পদ্ধতিতে কোনও প্রজেক্টের ফাইলগুলোর পরিবর্তন ট্র্যাক করে রাখা হয় যাতে করে আমরা পরে দরকারে আগের নির্দিস্ট ভার্সনে যেতে পারি তাকে ভার্সন কন্ট্রোল (Version Control System বা VCS) বলে। গিট প্রায় যেকোনো ফাইলের পরিবর্তন গুলো ট্র্যাক করে রাখতে পারে। আপনি যদি কোন ওয়েব ডেভেলপার হন তাহলে আপনি চাইবেন আপনার প্রতিবারের করা ডেভেলপ যেন সংরক্ষিত থাকে। এই কাজের জন্যই একটি ভার্সন কন্ট্রোল সিস্টেম (VCS) ব্যবহার করা হয়। যদি কখনো আপনার নতুন আপডেটে কোন সমস্যা হয় তাহলে আপনি version control system বা VCS ব্যবহার করে আমরা সিলেক্টেড ফাইলকে আগের অবস্থায় নিয়ে যেতে বা সম্পুর্ন প্রজেক্টকে আগের ভার্সনে নিয়ে যেতে পারি বা রিভার্ট (Revert) করতে পারি। একই সাথে আমরা ভার্সন কন্ট্রোল সিস্টেম ব্যবহার করে আমাদের প্রজেক্টের ফাইল গুলো আগের ভার্সনের সাথে তুলনা করতে পারি। আমাদের প্রজেক্টে নতুন কিছু যুক্ত করার পরে যদি কোন সমস্যা তৈরি হয় বা ভুলে কিছু ডিলিট হয়ে যায় তাহলে আমরা Version Control System ব্যবহার করে খুব সহজেই আগের অবস্থায় ফিরে যেতে পারি।
গিট কি? (What is Git?)
গিট হলো একটি Open-source ভার্সন কন্ট্রোল সিস্টেম যা দিয়ে আমরা একটি প্রজেক্টের ফাইল গুলোর পরিবর্তন ট্র্যাক করতে পারি। গিট ২০০৫ সালে লিনাক্স কার্নেলের জন্য প্রকাশ করা হয় যার স্রস্টা Linus Torvalds. অন্য কার্নেল ডেভেলপাররা এটার ডেভেলপমেন্ট এ কন্ট্রিবিউট করে। বর্তমানে এটা বিশ্বের সবচেয়ে জনপ্রিয় ভার্সন কন্ট্রোল সিস্টেম। git আপনার প্রজেক্টের লাস্ট স্টেট (snapshot) সেভ করার মাধ্যমে কাজ করে। লাস্ট snapshot থেকে যেসব ফাইল পরিবর্তন হয়েছে বা তৈরি হয়েছে গিট সেসব ফাইলকে রেখে দেয়।
Git states কি?
গিটের তিনটি প্রাইমারি স্টেট রয়েছে।
মডিফাইড – Modified : ফাইল পরিবর্তন করা হয়েছে, কিন্তু গিট এখন এইগুলো মার্ক করেনি। এই ফাইলগুলো গিটের পরবর্তি স্নাপশটে অন্তর্ভুক্ত হবেনা।
স্টেজড – Staged: ফাইলের পরিবর্তন গুলো গিট ট্র্যাক করে রেখেছে, এবং এদের পরবর্তি গিট স্নাপশটে অন্তর্ভুক্ত করা যাবে।
কমিটেড – Committed: ফাইল গুলো পরবর্তি গিট স্নাপশটের অন্তর্ভুক্ত করা হয়েছে।
গিট রিপজিটরি কি? (What is git repository?)
সহজ ভাষায় বলতে গেলে গিট রিপজিটরি হলো একটি ফোল্ডার বা ডিরক্টরি যেখানে প্রজেক্ট রাখা হয়। এটা আপনার লোকাল কম্পিউটারও হতে পারে বা কোন অনলাইন হোস্টিংও হতে পারে। এই রিপোজিটরি আপনার সম্পুর্ন কোডবেজ এবং প্রত্যেকটি রিভিশন হিস্টরি সেভ করে রাখবে। গিট রিপোজিটরি রাখার জন্য জনপ্রিয় অনলাইন হস্টিং সার্ভিসগুলো হলো, GitHub
গিট ব্রাঞ্চ কি? (What is git branch)
ধরা যাক আমরা আমাদের প্রজেক্টে কোন নতুন ফিচার যুক্ত করতে চাই। এর জন্য আমাদের মূল প্রজেক্টে সরাসরি কোড আপডেট না করে একটা নতুন ওয়ার্কিং ডিরেক্টরি করা হয়। একেই আমরা ব্রাঞ্চ বলি। এখানে আমরা প্রজেক্টে নতুন ফিচার যুক্ত করে টেস্টিং করি এবং সব কিছু ঠিক থাকলে মূল প্রজেক্টে মার্জ করে নিই। গিট ব্রাঞ্চ গুলো স্বাধীনভাবে প্রজেক্টে কাজ করার সুবিধা দেয়। আমরা যদি কোন প্রজেক্টে ব্রাঞ্চ তৈরি করি তবে আমরা নতুন যেসব কাজ করবো তার হিস্টরি/ রেকর্ড এই ব্রাঞ্চেরই অন্তর্ভুক্ত হবে। আমরা git branchকমান্ড ব্যবহার করে নতুন ব্রাঞ্চ তৈরি/নামকরন/ডিলিট করতে পারি।
গিট কমিট কি? (What is git commit?)
আমরা গিট কমান্ড ব্যবহার করে আমরা যেকোনো মোমেন্টে আমাদের প্রজেক্টের স্নাপশট রেখে দিতে পারি। এই কমান্ড ই গিট কমিট কমান্ড। git commitকমান্ড ব্যবহার করার আগে আমাদেরকে সমস্ত ফাইলকে স্টেজিং এরিয়াতে নিতে হবে। এর জন্য আমাদের git add ব্যবহার করতে হবে। এতে করে আমাদের Modified Files/Folder গুলো কমিটের উপযুক্ত হবে (Staged হবে)। এসব কমান্ড নিয়ে আমরা বিস্তারিত দেখবো একটু পরে।
গিট চেকআউট কি? (What is git checkout?)
গিট চেকআউট কমান্ড গিট ব্রাঞ্চ গলোর মধ্যে সুইচ করা এবং ফাইল restore করার জন্য ব্যাবহার করা হয়। সহজ কথায় বলতে গেলে এটাকে প্রজেক্টের বিভিন্ন ভার্সনের মধ্যে সুইচ করার একটি রাস্তা হিসেবে বিবেচনা করা যেতে পারে। এই কমান্ড তিনটি উপদানের উপর অপারেশন করতে পারে। যথা, ফাইল, কমিট, ব্রাঞ্চ
গিট ক্লোন এবং গিট পুল কমান্ড (git clone and git pull)
দুটি কমান্ডই রিমোট রিপোজিটরি থেকে ফাইল লোকাল কম্পিউটারে ডাউনলোড করতে ব্যাবহার করা হয়। git clone কমান্ড কোন রিমোট রিপোজিটরি থেকে বর্তমান ভার্সন গুলো ডাউনলোড করে লোকাল মেশিনে সেভ করে রাখে। এরপর আপনি এডিট শুরু করতে পারবেন।
অপরদিকে git pull কমান্ড ব্যাবহার করে আমরা রিমোট রিপোজিটরি থেকে ফাইলগুলো ডাউনলোড করে বর্তমান লোকালে সেভ করা ফাইলগুলোকে আপডেট করতে পারি। এটা অনেকটা আমার কাজের সাথে আসল প্রজেক্টের নতুন কাজগুলো মার্জ করার একটি পদ্ধতি।
গিট পুশ কমান্ড (Git push command)
গিট পুশ কমান্ডের মাধ্যমে কোন লোকাল প্রজেক্টে অনলাইনে কোন রিপজিটরিতে সেভ করা হয়।
GitHub
গিটহাব এমন একটি প্লাটফর্ম যাকে আমরা কোড হোস্ট করার কাজে ব্যবহার করি। এখানে আমাদের রিমোট রিপোজিটরি থাকে এবং যেকোন সাইজের প্রজেক্টে টিমওয়ার্ক করার সকল টুলস্ ই আছে গিটহাবে। গিটহাবে কোন প্রজেক্টকে রিপোজিটরি বলা হয়ে থাকে। গিটহাবে আমাদের কোন রিপোজিটরি বা প্রজেক্টে কাজ করতে হলে অবশ্যই একটি গিটহাব একাউন্ট এর দরকার হবে। আমাদের কোডবেস যদি গিটহাবের মতো কোন রিমোট রিপোজিটরি তে থাকে তবে নিচের সুবিধাগুলো পবো,
প্রজেক্টের সকল কন্ট্রিবিউটর একটি কমন রিমোট রিপোজিটরি থেকে লেটেস্ট ভার্সন এর কোড নিতে পারবে।
যদি কোন কন্ট্রিবিউটর কোন নতুন ফিচার Debian ভিত্তিক os এর জন্যযুক্ত করে তবে সেটা একটি রিপোজিটরি তে পুশ করে রাখলেই হবে। আলাদা করে সকল কন্ট্রিবিউটরকে দিতে হবে না।
কোলাবেরেটর এবং কন্ট্রিবিউটররা একসাথে গিটহাবের অটোমেশন টুলস্ ব্যবহার করে দ্রুততার সাথে কাজ করতে পারবে।