Git বনাম SVN

মূল পার্থক্যটা হলো আর্কিটেকচারে: Git হলো distributed (বিকেন্দ্রীভূত), আর SVN হলো centralized (কেন্দ্রীভূত) ভার্সন কন্ট্রোল সিস্টেম। এই একটা পার্থক্য থেকেই বাকি সব পার্থক্য এসেছে।

১. আর্কিটেকচার

SVN (Centralized): একটাই কেন্দ্রীয় সার্ভার থাকে যেখানে পুরো রিপোজিটরি ও তার ইতিহাস সংরক্ষিত থাকে। ডেভেলপাররা শুধু working copy চেক আউট করে। সার্ভার ডাউন থাকলে commit, log দেখা, branch করা—কিছুই করা যায় না।

Git (Distributed): প্রতিটা ডেভেলপারের কাছে পুরো রিপোজিটরির সম্পূর্ণ কপি থাকে—সব ইতিহাসসহ। ইন্টারনেট ছাড়াই commit, branch, merge, history দেখা—সব করা যায়। GitHub/GitLab আসলে শুধু একটা "সম্মত" কেন্দ্রীয় কপি, টেকনিক্যালি বাধ্যতামূলক কিছু না।

২. Branching এবং Merging

এটা সম্ভবত সবচেয়ে বড় ব্যবহারিক পার্থক্য।

SVN-এ branch মানে আসলে ডিরেক্টরির কপি (/branches/feature-x)। Branch তৈরি করা ভারী কাজ মনে হয়, আর merge করা ঐতিহাসিকভাবে বেশ যন্ত্রণাদায়ক ছিল (যদিও পরের ভার্সনগুলোতে উন্নতি হয়েছে)।

Git-এ branch হলো স্রেফ একটা commit-এর দিকে pointer—তৈরি করতে মিলিসেকেন্ড লাগে। এজন্যই feature branch, Git Flow, trunk-based development—এসব workflow Git-এর সাথে এত স্বাভাবিকভাবে কাজ করে। Merge করাও অনেক স্মার্ট, কারণ Git পুরো history graph জানে।

৩. Commit এবং ডেটা মডেল

  • SVN ট্র্যাক করে ফাইলের পরিবর্তন (deltas), আর revision number গুলো ক্রমিক (r1, r2, r3...)।
  • Git প্রতিটা commit-এ পুরো প্রজেক্টের একটা snapshot সংরক্ষণ করে (ভেতরে অপটিমাইজড), আর প্রতিটা commit চিহ্নিত হয় SHA-1 hash দিয়ে। এই content-addressable মডেলের কারণে ডেটার integrity নিশ্চিত হয়—history-তে কেউ চুপিচুপি কিছু বদলালে hash বদলে যাবে।

৪. গতি (Performance)

Git-এ প্রায় সব অপারেশন লোকাল—তাই log, diff, blame, branch switching খুবই দ্রুত। SVN-এ অনেক অপারেশনের জন্য সার্ভারে network round-trip লাগে।

৫. Staging Area

Git-এর একটা ইউনিক ফিচার হলো staging area (index)। আপনি বেছে বেছে ঠিক করতে পারেন কোন পরিবর্তনগুলো পরের commit-এ যাবে (git add -p দিয়ে একটা ফাইলের আংশিক পরিবর্তনও stage করা যায়)। SVN-এ এমন কিছু নেই—working copy-তে যা বদলেছেন, সবই commit হয়।

৬. যেখানে SVN এখনো এগিয়ে

সততার খাতিরে বলা দরকার, SVN-এরও কিছু সুবিধা আছে:

  • বড় বাইনারি ফাইল: SVN বড় binary asset (গেম ডেভেলপমেন্ট, ডিজাইন ফাইল) ভালো হ্যান্ডেল করে। Git-এ এর জন্য Git LFS লাগে।
  • Partial checkout: SVN-এ রিপোজিটরির শুধু একটা সাবডিরেক্টরি checkout করা যায় সহজে (Git-এ sparse checkout আছে, তবে জটিলতর)।
  • সূক্ষ্ম access control: ডিরেক্টরি-লেভেলে read/write permission দেওয়া SVN-এ সহজ।
  • সরল মানসিক মডেল: Sequential revision number আর একটাই "সত্যের উৎস"—নতুনদের জন্য বোঝা সহজ।

অন্যান্য সিস্টেম প্রসঙ্গে

  • Mercurial (hg): Git-এর মতোই distributed, তবে ইন্টারফেস সহজ। Git-এর জনপ্রিয়তার কাছে হেরে গেছে (যদিও Meta এখনো ব্যবহার করে)।
  • Perforce: বড় enterprise ও গেম স্টুডিওতে জনপ্রিয়, বিশাল রিপো ও বাইনারি ফাইলের জন্য।
  • CVS: SVN-এর পূর্বসূরি, এখন কার্যত অবসোলিট।
Share