৪.৮ সার্ভারে গিট – গিটল্যাব

গিটল্যাব

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

ইন্সটলেশন

গিটল্যাব ডাটাবেস সমর্থিত ওয়েব অ্যাপ্লিকেশন, তাই এর ইন্সটলেশন অন্যান্য গিট সার্ভারের চেয়ে কিছুটা জটিল। সৌভাগ্যবশত এর প্রক্রিয়া বেশ ভালোভাবে লিখিত আছে এবং তা সঠিকভাবেই সমর্থন করে। সার্ভারে ইন্সটল করতে গিটল্যাব দৃঢ়ভাবে সুপারিশ করে তাদের অফিসিয়াল “অম্নিবাস গিটল্যাব” প্যাকেজটি ব্যবহার করতে। 

অন্যান্য ইন্সটলেশন বিকল্পগুলো হলো –

১. গিটল্যাব হেল্ম (Helm ) চার্ট, কিউবারনেটিস সাথে ব্যবহারের জন্য।

২. ডকারাইজড গিটল্যাব পাকেজ, ডকারের সাথে ব্যবহারের জন্য।

৩. সোর্স ফাইল থেকে।

৪. বিভিন্ন ক্লাউড প্রভাইডার, যেমন AWS, Azure, OpenShift এবং Digitalocean।

বিস্তারিত জানতে গিটল্যাব কমিউনিটি এডিশন (CE) এর readme পড়ুন।

অ্যাডমিনিস্ট্রেশন

গিটল্যাবের অ্যাডমিনিস্ট্রেশন ইন্টারফেসে ওয়েব থেকে প্রবেশ করা যায়। শুধু আপনার ব্রাউজারটি ব্যবহার করে যেখানে গিটল্যাব ইনস্টল করা আছে সেই হোস্টনেইম অথবা আই পি এড্রেস এ প্রবেশ করুন এবং অ্যাডমিন হিসেবে লগ ইন করুন। প্রাথমিকভাবে admin@local.host ইউজার নেইম এবং 5iveL!fe পাসওয়ার্ড হিসেবে (যা পরবর্তীতে অবশ্যই পরিবর্তন করবেন) ব্যবহার করা হয়। লগইন করে উপরের ডান পাশের মেনু থেকে “Admin Area” আইকন ক্লিক করুন।
				
					$ git branch -v
  iss53   93b412c Fix javascript issue
* master  7a98805 Merge branch 'iss53'
  testing 782fd34 Add scott to the author list in the readme
				
			
চিত্র-৫০: গিটল্যাব মেনু “Admin Area” আইকন

ব্যবহারকারী

আপনার গিটল্যাব সার্ভার ব্যবহারকারী সকলকে অবশ্যই ইউজার অ্যাকাউন্ট থাকতে হবে। ইউজার অ্যাকাউন্ট খুবই সাধারন,    করে। প্রত্যেকটা ইউজার অ্যাকাউন্টের একটা নেইমস্পেস আছে, যা ঐ ব্যবহারকারীর অধীনস্থ প্রজেক্টগুলোর লজিকাল গ্রুপিং কে বুঝায়। যদি jane নামে কোন ব্যবহারকারীর project নামে কোন প্রোজেক্ট থাকে তবে ঐ প্রোজেক্ট এর url হবে http://server/jane/project .
চিত্র-৫১: গিটল্যাব ইউজার আডমিনিস্ট্রেশন স্ক্রিন
				
					$ git branch --merged
  iss53
* master
				
			
আপনি দুটি উপায়ে একটি ইউজার অ্যাকাউন্ট মুছে ফেলতে পারেন –

ব্লকিং – একজন ব্যবহারকারীকে ব্লক করার মাধ্যমে তাকে গিটল্যাব এ লগইন করা থেকে বিরত রাখতে পারবেন, কিন্তু উক্ত ব্যবহারকারীর অধীনস্থ (নেইমস্পেসের) সকল তথ্য সংরক্ষিত থাকবে, সেই সাথে তার কমিটগুলোও তার প্রফাইলের সাথে সংযুক্ত থাকবে।

ডেস্ট্রয়িং – একজন ব্যবহারকারীর অ্যাকাউন্ট একেবারে মুছে ফেলার মাধ্যমে। এই উপায়ে ব্যবহারকারীর অ্যাকাউন্ট টি ডাটাবেস ও ফাইল সিস্টেম থেকে একেবারে মুছে ফেলা হয়। উক্ত অ্যাকাউন্ট এর নেইমস্পেস থেকে সকল প্রোজেক্ট ও তথ্য মুছে ফেলা হয়, এমনকি যদি উক্ত অ্যাকাউন্টের অধীনে কোন গ্রুপ থাকে তবে তাও মুছে ফেলা হয়। এটা স্পষ্টতই একটা স্থায়ী ও ধ্বংসাত্নক প্রক্রিয়া যা খুব কমই প্রয়োজন হবে।

গ্রুপ সমূহ

গিটল্যাব গ্রুপ হল কতগুলো প্রোজেক্টের ও সেসকল প্রোজেক্টে প্রবেশের নিয়মের সমষ্টি। প্রতিটা গ্রুপের একটি প্রজেক্ট নেইমস্পেস আছে। training নামে কোন গ্রুপে materials নামে কোন প্রোজেক্ট থাকলে তার url হবে http://server/training/materials.

চিত্র-৫২: গিটল্যাব গ্রুপ অ্যাডমিনিস্ট্রেশন স্ক্রিন
প্রতিটা গ্রুপ কতিপয় ব্যবহারকারীর সাথে যুক্ত, যাদের প্রতিজনের গ্রুপ ও গ্রুপের প্রোজেক্টগুলোর জন্য পারমিশন লেভেল রয়েছে। এই পারমিশন লেভেল এর রেঞ্জ, গেষ্ট ( শুধু ইস্যু এবং কথোপকথন ) থেকে মালিক ( গ্রুপ, এর সদস্য এবং প্রোজেক্ট গুলোর সামগ্রিক নিয়ন্ত্রণ ) পর্যন্ত। পারমিশন এর ধরন গুলো সংখ্যায় অত্যাধিক হওয়ায় এখানে তালিকা করে দেখানো সম্ভব না হলেও গিটল্যাব এর অ্যাডমিনিস্ট্রেটিভ স্ক্রিনে কাজে আসার মত লিঙ্ক রয়েছে।

প্রোজেক্ট

একটি গিটল্যাব প্রোজেক্ট মোটামুটি একটি গিট রেপোজিটরির সাথে মিলে যায়। গ্রুপের অধীনস্থ বা ব্যক্তিগত যেমনই হোক, প্রতিটা প্রোজেক্ট একটি মাত্র নেইমস্পেসের অধীনে থাকে। প্রোজেক্টটি কোন ব্যবহারকারীর অধীনস্থ হলে, প্রোজেক্টির মালিকের পারমিশন নিয়ন্ত্রন করার সম্পূর্ন এক্সেস বা অধিকার থাকে। আর প্রোজেক্টটি কোন গ্রুপের অধীনস্থ হলে গ্রুপের পারমিশন লেভেল অনুযায়ী নিয়ন্ত্রন করা যাবে।

প্রতিটি প্রোজেক্টের একটি ভিজিবিলিটি লেভেল রয়েছে,, যা নিয়ন্ত্রণ করে প্রোজেক্ট টি কার কার কাছে ভিজিবল হবে। প্রোজেক্টটি ব্যক্তিগত (Private) হলে প্রোজেক্ট এর মালিককে অবশ্যই নির্দিষ্ট ব্যবহারকারীদের জন্য ব্যবহারের অনুমতি প্রদান করতে হবে। একটি অভ্যন্তরীণ (Internal) প্রোজেক্ট যে কোন লগ-ইন ব্যবহার কারীর জন্য দৃশ্যমান হবে এবং একটি সার্বজনীন (Public) প্রোজেক্ট সকলের জন্যই দৃশ্যমান হবে। মনে রাখতে হবে যে এইটা গিটের ফেচ (git fetch) কমান্ড বা অয়েব ইন্টারফেস উভয়ের জন্যই সমভাবে প্রযোজ্য।

হুক সমূহ

গিটল্যাব প্রোজেক্ট বা সিস্টেম উভয় স্তরেই হুকের সুবিধা দিয়ে থাকে। এগুলোর যেকোনটির জন্য যখনই কোন প্রাসঙ্গিক ঘটনা ঘটে গিটল্যাব সার্ভার বর্ণনা মূলক JSON সহযোগে একটি HTTP POST রিকোয়েস্ট সম্পন্ন করে। এটি আপনার গিট রিপোজেটরি ও গিটল্যাব ইন্সট্যান্সকে আপনার বাকি ডেভেলপমেন্ট অটোমেশন যেমন সি আই আর্ভার, চ্যাট রুম অথবা ডেপ্লয়মেন্ট টুলের সাথে সংযুক্ত করে।

প্রাথমিক ব্যবহার সমূহ

গিটল্যাব দিয়ে আপনি স্বভাবতই প্রথমে একটি প্রোজেক্ট তৈরী করতে চাইবেন। আপনি খুব সহজেই টুলবারের “+” চিহ্নে ক্লিক করে এটা করতে পারেন। আপনা্র কাছে প্রোজেক্ট এর জন্য একটি নাম, যে নেইমস্পেসে রাখতে চান সেই নেইমস্পেস এবং দৃশ্যমান হবার যে নিয়মটি (visibility level) গ্রহণ করতে চান তা চাওয়া হবে। এখানে যা কিছু প্রদান করা হবে তার কিছুই স্থায়ী নয়, পরবর্তীতে সেটিং ইন্টারফেস থেকে পরিবর্তন করে নেওয়া যাবে। এখন “Create Project” এ ক্লিক করলেই আপনার প্রোজেক্ট তৈরির প্রক্রিয়া সম্পন্ন হবে।

প্রোজেক্ট তৈরির পর আপনি হয়ত প্রোজেক্টটি লোকাল গিট রিপোজেটরির সাথে সংযুক্ত করতে চাইবেন। প্রতিটা প্রজেক্ট HTTPS অথবা SSH এর মাধ্যমে এক্সেস করা সম্ভব, এগুলোর যেকোনটাই গিটের রিমোট কনফিগার করার জন্য ব্যবহার করা যেতে পারে। প্রোজেক্ট এর হোম পেজের উপরিভাগে URL পাওয়া যায়। বিদ্যমান লোকাল রিপোজেটরির জন্য এই কমান্ডটি হোস্ট করা লোকেশনে gitlab নামে রিমোট তৈরি করবে –
				
					$ git remote add gitlab https://server/namespace/project.git
				
			
যদি আপনার কাছে রিপোজেটরির কোন লোকাল কপি না থাকে, তবে আপনি এরকম করতে পারেন-
				
					$ git clone https://server/namespace/project.git
				
			
ওয়েব ইন্টারফেস রিপোজেটরির বেশ কিছু প্রয়োজনীয় ভিউ প্রদান করে থাকে। প্রতিটা প্রোজেক্ট এর হোম পেজে বর্তমান কার্যকলাপ ও লিঙ্ক দেখা যায় যা প্রোজেক্টের ফাইল বা কমিট লগ ভিউ এ নিয়ে যায়।

একত্রে কাজ করা

একত্রে কাজ করার জন্য সবচেয়ে সহজ একটি উপায় হল, গিট রিপোজেটরিতে প্রত্যেক ব্যবহারকারীকে সরাসরি পুশ এর অনুমতি দিয়ে দেওয়া। প্রোজেক্ট সেটিং এর মেম্বার সেকশনে গিয়ে আপনি অতি সহজে প্রোজেক্ট এর জন্য ব্যবহারকারী এবং ব্যবহারকারীর জন্য অনুমতির স্তর (Access Level, ইতিমধ্যে গ্রুপ এ কিছুটা বর্ননা করা হয়েছে) সংযুক্ত করতে পারবেন। একজন ব্যবহারকারীকে “Developer” বা তদুর্ধ অনুমতি প্রদানের মাধ্যমে তাকে কমিট বা ব্রাঞ্চ সরাসরি রিপোজেটরি তে পুশ করতে সক্ষম করতে পারবেন।


আরেকটি, একত্রে কাজ করার আরও স্বাধীন উপায় হল মার্জ রিকোয়েস্ট ব্যবহার করা। এই ফিচারটি ব্যবহার করে যে কোন ব্যবহারকারী যে কিনা প্রোজেক্ট দেখতে সক্ষম, উক্ত প্রোজেক্ট এ একটি নিয়ন্ত্রিত ব্যবস্থার মধ্য দিয়ে অবদান রাখতে পারে। সরাসরি অনুমতি আছে এমন ব্যবহারকারী সহজেই ব্রাঞ্চ খুলতে, ব্রাঞ্চে কমিট পুশ করতে, ব্রাঞ্চ থেকে মাস্টার বা অন্য যে কোন ব্রাঞ্চে মার্জ রিকোয়েস্ট পাঠাতে পারে। যেসকল ব্যবহারকারীর রেপোজেটরিতে পুশ করার অনুমতি নেই তারা “fork” এর মাধ্যমে তাদের নিজস্ব সংস্করণ তৈরি করতে পারে, তাদের নিজস্ব সংস্করণে কমিট পুশ করতে পারে এবং তাদের “fork” থেকে মূল প্রোজেক্টে মার্জ রিকোয়েস্ট পাঠাতে পারে। এই পদ্ধতি রিপোজেটরির স্বতাধিকারীকে সম্পূর্ন নিয়ন্ত্রনে থেকে অচেনা বা অবিশ্বস্ত সোর্স কেও অবদান রাখতে সাহায্য করে।


মার্জ রিকোয়েস্ট এবং ইস্যুগুলো গিটল্যাবের দীর্ঘস্থায়ী আলোচনার প্রধান একক। প্রতিটি মার্জ রিকোয়েস্ট প্রস্তাবিত পরিবর্তনের (যা হালকা ধরনের কোড পর্যালোচনা সমর্থন করে) লাইন-বাই-লাইন আলোচনার সুযোগ দেয়।
এই সেকশনটি মূলত গিটল্যাবের গিট সম্পর্কিত ফিচারগুলোর উপর দৃষ্টিপাত করে। তবে একটি পরিপক্ক প্রোজেক্ট হিসেবে এটি আপনার দলকে একত্রে কাজ করার জন্য আরও অনেক ফিচার প্রদান করে থাকে। এর মধ্যে রয়েছে প্রোজেক্ট উইকি, সিস্টেম মেইনটেনেন্স  টুল। গিটল্যাবের একটি সুবিধা হল সেটাপের পর সার্ভার একবার চলমান হলে আপনার খুব কমই কনফিগারেশন ফাইল টুইক করতে হবে বা SSH এর মাধ্যমে সার্ভার এক্সেস করতে হবে। বেশিরভাগ অ্যাডমিনিস্ট্রেশন বা সাধারণ ব্যবহার ব্রাউজার ইন্টারফেসের মাধ্যমেই করা যেতে পারে।