Contents

গিটহাব কি? পরিচিতি এবং ধারণা


সংজ্ঞা

গিটহাব কি যদি বলতে হয় তবে এভাবে বলা যায় Microsoft এর বানানো ক্লাউড হোস্টিং প্লাটফর্ম যা আমাদের গিট ব্যবহারের সুযোগ করে দেয় ক্লাউডের মাধ্যমে।

চলুন সহজ করি ব্যাপারটা….

তাহলে আমাকে প্রশ্ন করতে পারবেন, তার মানে কি আমাদের ডেটা ক্লাউড হোস্টিং এ রাখবে?

আপনি সঠিক ধরেছেন, অনেকটাই গুগল ড্রাইভের মতো কেবল পার্থক্য হলো এটা কোড রাখার প্লাটফর্ম এবং গুগল ড্রাইভ ফাইল রাখার প্লাটফর্ম।

কেনো গিটহাব?

আমরা কোড রাখার জন্য তো আমরা আমাদের নিজেদের কম্পিউটারের লোকাল স্টোরেজ (যেমন: হার্ড ড্রাইভ) অথবা, গুগল ড্রাইভ ব্যবহার করতে পারি। তাই না? গুগল ড্রাইভের ফাইল একে অন্যের সাথে ভাগাভাগিও করে নিতে পারি। পাশাপাশি একই ফাইলে একাধিক মানুষ কাজ করতে পারি। তাই না? তাহলে গিটহাবের আবার কি প্রয়োজন?

  • লোকাল স্টোরেজ

    আমরা কেনো ফাইল লোকাল মেশিনে সংরক্ষন যদি করি তাহলে সেটা আমরা সহজে ভাগাভাগি করে নিতে পারবো না, পাশাপাশি অনেকে মিলে সহজে একই ফাইলের উপর কাজ করতে পারবো না। এবং আমাদের কম্পিউটার কোনো কারণে ক্ষতিগ্রস্থ হলে আমাদের ফাইল ও হারিয়ে যেতে পারে। তাই না?

  • তাহলে গুগল ড্রাইভ কেনো নয়?

    গুগুল ড্রাইভে মনে করুন আপনি কোনো একটা কোড লিখছেন অনেকের সাথে মিলে। তাহলে আপনি যদি ওই কোড টা আপডেট করতে চান কি করবেন? আগের ফাইল টা মুছে আবার নতুন করে সংরক্ষণ করবেন নাকি? হয়তো না। গুগল ড্রাইভে version control নামে একটা বর্তমানে ফিচার আছে। তাহলে সমস্যাটা কোথায়?

  • তাহলে আমরা ধরে নিতে পারি যে একাকী কাজ করার জন্য গুগল ড্রাইভ বেশ কার্যকরী? কিন্তু যখন আপনি দেখবেন যে কোডে সামান্য পরিবর্তন করেছেন এবং ফলস্বরূপ কোড আর কাজ করে না, অতীতে কি ফিরে যেতে পারবেন। হয়তো পারবেন version control utility এর মাধ্যমে। কিন্তু যদি কোনো বড়সড় কোনো প্রজেক্টে কাজ করছেন। প্রতিদিন কোডবেজ ঘণ ঘণ মডিফাই করার প্রয়োজন হতে পারে। তখন কি করবেন?

  • এবার আসি টীম-ওয়ার্ক। গুগল ড্রাইভে বর্তমানে google docs, sheets, slides, সহ API এর মাধ্যমে অনেক third party plugin রয়েছে। নি:সন্দেহে আমরা তাই বলতেই পারি যে খুব সহজেই একই ফাইলে একাধিক মানুষ সহজে কাজ করতে পারে। কিন্তু আমরা যখন google drive এ কোড সংরক্ষণ করবো, আপনি আর আপনার বন্ধু মনে করেন ভিন্ন ভিন্ন ভাবে কোড লিখে আপলোড দিতে চাইলেন। এতে দেখা গেলো কিছু ফাংশনের প্যারামিটার পরিবর্তন হয়ে গেলো। তখন আপনার আরেক বন্ধু এসে আর ঝামেলা পাকিয়ে নিলো, কোডে নতুন ফিচার যুক্ত করে। এতে কোড অনড় হয়ে গেলো।

উপরোক্ত সমস্যাগুলো সমাধানের উদ্যেশ্যেই মূলত আজকের এই আলোচনা গিটহার নিয়ে। গিটহাব তাহলে কিভাবে এই সমস্যাগুলো সমাধান করবে?

গিটহাবের কার্যপদ্ধতি

গিটহাবে আপনি চাইলে প্রজেক্ট তৈরি করতে পারবেন যা repository নামে পরিচিত। একে আমরা এভাবে ভাগ করতে পারি,

  • Private repository

    সেখানে একাকী কোনো প্রজেক্ট চাইলে করতে পারবেন। এক্ষেত্রে কেবল আপনি এবং আপনার নির্বাচিত কয়েকজন user কোনো প্রজেক্ট নিয়ন্ত্রণ করতে পারবে।

  • Public repository

    যেখানে পুরো ব্যাপারটাই স্বাধীণ। যে কেউ আপনার প্রজেক্ট access করতে পারবে পাশাপাশি আপনার কোড গুগল বা অন্যান্য সার্চ ইন্জিনের ইনডেক্সেও চলে যাবে। এর মাধ্যমে আরো বেশী পরিশানে collaborate করা সম্ভব।

আচ্ছা তাহলে কাজের ধারা টা কিভাবে? প্রশ্ন থেকেই যায়, তাই না? চলুন একটা বাস্তব উদাহারণের সাহায্যে জানার চেষ্টা করি।

মনে করলাম আমি একটা প্রজেক্ট তৈরি করবো যেখানে, “Programming in ANSI C Balagurusamy (8 th chapter)” বইয়ের সবগুলো excercise এর সমাধান থাকবে। কারন গুগলে যেসব সমাধান রয়েছে সেসব হয়তো আগের সংস্করণের। তাহলে এজাতীয় একটা প্রজেক্ট আমরা তৈরি করতে চাই যেনো বাকিরাও উপকৃত হয়। পাশাপাশি কেউ গুগল সার্চ করেও যেনো আমাদের প্রজেক্ট দেখতে পারবে তাই আমরা এটাকে public করে রাখবো। এবার আসি ownership নিয়ে। মনে করুন আমি প্রজেক্ট টা শুরু করলাম তাহলে সব ক্ষমতা তো আমার হাতে থাকার কথা তাই না? মজার ব্যাপারটা হলো এখানে। আমি যদি প্রজেক্টের নাম দেই “ansi-c-balagurusamy” তাহলে repository এর পুরো নাম হবে,

Sharafatkarim/ansi-c-balagurusamy

এইতো হলো আমার নিজের personal প্রজেক্ট। কিন্তু আমি চাইলাম সবার সাথে ভাগাভাগি করে নিতে কাজটা। তখন?

যেহেতু আগেই বলেছি যে এটা public repository তাই যে কেউ আমার এই কাজ দেখতে পারবে। পাশাপাশি তারা এই কাজটি নিজের কম্পিউটারে হুবহু সংরক্ষণ করে নিতে পারবে যাকে আমরা বলবো clone। আরো একটা কাজ আমরা করতে পারি সেটা হলো অন্য কারো কোনো repository কে নিজের GitHub account এর আওতায় নিয়ে আসতে পারি। সেটাকে আমরা বলবো fork। তাহলে আমরা এই প্রজেক্ট, মনে করলাম, আমার এক ভাই, নাম তামিম, সেটাকে ফর্ক করলো। এক্ষেত্রে তার গিটহাব account এ আমার প্রজেক্টের একটা কপি চলে যাবে এবং এর নাম হবে,

sr-tamim/ansi-c-balagurusamy

এখন এই প্রজেক্ট ২ ভাগে ভাগ হয়ে গেলো এবং আমরা প্রত্যেকেই প্রত্যেকের প্রজেক্টের মালিক। মজার না? তার মানে আমি যদি কিছুটা পরিবর্তন করি আমার কোডে তাহলে আমার তামিম ভাই পাবে না এবং অনুরূপভাবে তামিম ভাই তার কোডে কিছূটা মডিফাই করলে আমি পাবো না?

  • উত্তর হচ্চে হ্যাঁ এবং না, উভয়েই। এটাই হলো মজার বিষয়।

    কেউ যখন অন্য কারো প্রজেক্ট fork করে তখন তাদের মধ্যাকার বন্ধন সম্পূর্ণভাবে ছিন্ন হয়ে যায় না কিন্তু clone করে ছিন্ন করা যায়।

আবার আমি আমার উদাহারণে ফেরত আসি। যেহেতু তামিম আমার প্রজেক্ট কপি করেছে তাই আমি যদি কোডে কোনোরূপ পরিবর্তন করি তামিম সেটা নিয়ে নিতে পারবে কিন্তু তামিম কিছু পরিবর্তন করলে সেটা তামিম যদি আমাকে না দেয় সেটা আমি নিতে পারবো না। অর্থাৎ একই প্রজেক্ট সবাই নিজের কাছে এই পদ্ধতিতে রেখে দিতে পারবে এবং সবাই নিজের নিজের প্রজেক্টের মালিক। তবে যে প্রজেক্ট তৈরি করবে সে কোনো পরিবর্তন করলে সবাই সেটা নিতেও পারবে প্রত্যাখ্যান ও করতে পারবে। আর সবাই নিজেদের মতো কাজ করে যে প্রজেক্ট শুরু করবে তার কাছে merge request পাঠাতে পারবে। আবার চাইলে সবাই নিজেরা নিজেদের মাঝে কাজ করতে পারবে। কারো কাছে কোনো জবাবদিহিতা নেই। এটাই হলো open source project এর সৌন্দর্য। সবাই মুক্তভাবে কাজ করতে পারবে।

কিভাবে শিখবেন?

গিটহাব সম্পর্কে জানতে আগে গিট সম্পর্কে শিখতে হবে। গিট গিটহাবের প্রাণকেন্দ্র বললেও ভুল হবে না এক-প্রকার। গিট সম্পর্কে হয়তো অন্য কোনোদিন আলোচনা করবো। তবে তাদেরকে উদ্দেশ্য করে আপাতত কিছূ লিংক দিয়ে দেই,

যারা একদম বিস্তারিত শিখতে চান,

বাংলা প্লেলিস্ট,

আমার লেখা Git এর উপর cheatsheet,

কৃতজ্ঞতা স্বীকার

  • Nayema (editing)
  • Mehedi Hasan (editing)

যেকোনো প্রয়োজনে আমার সাথে যোগাযোগ করতে পারবেন। যদি আরো বিস্তারিত জানার প্রয়োজন হয় বা কোথায় বুঝতে সমস্যা হলে কমেন্ট করতে পাড়েন। পড়ার জন্য আন্তরিক ধন্যবাদ।