ভার্সন কন্ট্রোল সিস্টেম – গিট (git)
- গবেষণা ক্ষেত্র : যেকোন
- বিষয় : Git সম্পর্কে প্রাথমিক ধারনা পাওয়া ।
ভার্সন কন্ট্রোল (Version Control) : ভার্সন কন্টোল হচ্ছে এমন একটি পদ্ধতি যা আপনার প্রজেক্টের(project) বিভিন্ন সময়ের পরিবর্তনগুলো সংরক্ষণ করে রাখে। ভার্সন কন্ট্রোল সিস্টেমের মাধ্যমে আপনি আপনার প্রজেক্টের পূর্বের যে কোন সময়ের স্থিতীশীল অবস্থায় ফিরে যেতে পারবেন।
গিট(git): গিট হচ্ছে একটি ওপেনসোর্স(open source) ভার্সন কন্ট্রোল সিস্টেম। এর মাধ্যমে একজন ব্যবহারকারী যতবার তার পরিবর্তনগুলো কমিট(commit) করবে ততবার গিট তার সম্পূর্ণ ফাইল সংরক্ষন করে রাখবে। গিট এর একটি বড় সুবিধা হচ্ছে একটি প্রজেক্ট নিয়ে অসংখ্য ডেভেলপার(developer) একই সময় কাজ করতে পারে।
ভার্সন কন্ট্রোল সিস্টেম – গিট (git)
ভার্সন কন্ট্রোল (Version Control) :
ভার্সন কন্টোল হচ্ছে এমন একটি পদ্ধতি যা আপনার প্রজেক্টের(project) বিভিন্ন সময়ের পরিবর্তনগুলো সংরক্ষণ করে রাখে। ভার্সন কন্ট্রোল সিস্টেমের মাধ্যমে আপনি আপনার প্রজেক্টের পূর্বের যে কোন সময়ের স্থিতীশীল অবস্থায় ফিরে যেতে পারবেন।
গিট(git):
গিট হচ্ছে একটি ওপেনসোর্স(open source) ভার্সন কন্ট্রোল সিস্টেম। এর মাধ্যমে একজন ব্যবহারকারী যতবার তার পরিবর্তনগুলো কমিট(commit) করবে ততবার গিট তার সম্পূর্ণ ফাইল সংরক্ষন করে রাখবে। গিট এর একটি বড় সুবিধা হচ্ছে একটি প্রজেক্ট নিয়ে অসংখ্য ডেভেলপার(developer) একই সময় কাজ করতে পারে। আপনি চাইলে ইন্টারনেট সংযোগ ছাড়াও কাজ করতে পারবেন।
আসুন দেখে নেই গিট এর বহুল ব্যবহৃত কমান্ডগুলো(command)-
- git init -একটি নতুন রিপোজিটরি(repository) তৈরি করার জন্য।
- git clone – পূর্ব থেকে বিদ্যমান কোন রিপোজিটরির সম্পূর্ণ তথ্য ডাউনলোড করার জন্য
- git commit – অফলাইন(offline) রিপোজিটরিতে স্থায়ীভাবে কাজ সংযুক্ত করার জন্য
- git pull – রিমোট(remote) রিপোজিটরি থেকে ফাইল ডাউনলোড করে অফলাইন রিপোজিটরির সাথে merge করার জন্য
- git push – অফলাইন রিপোজিটরি থেকে ফাইল রিমোট রিপোজিটরিতে আপলোড করার জন্য
কাজের ধাপসমূহ:
আমরা যখন লোকাল(local) রিপোজিটরিতে কোন পরিবর্তন করি তখন আমরা working directory-তে থাকি। git add কমান্ড দেয়ার পর সেটা staging area তে যায় এবং git commit কমান্ড দেয়ার পর সেটা স্থায়িভাবে লোকাল রিপোজিটরিতে যুক্ত হয়। পরবর্তিতে চাইলে সেটা রিমোট রিপোজিটরিতে git push কমান্ড দিয়ে আপলোড করে দেয়া যায়।
গিট : ইন্সটল ও কনফিগার করা
গিট নিয়ে কাজ শুরু করার জন্য আপনার কম্পিউটারকে গিট ব্যবহার উপযোগী করে নিতে হবে। সেজন্য আপনার কম্পিউটারে গিট ইন্সটল(install) করতে হবে। চলুন দেখে নেয়া যাক, কিভাবে গিট ইন্সটল এবং কনফিগার(configure) করে নিতে হয়।
Windows:
১. গিট প্যাকেজটি ডাউনলোড করার জন্য এখানে ক্লিক করুন।
২. ডাউনলোড করা ফাইলটি ক্লিক করে ইন্সটল করে নিন।
Linux:
Linux এর বিভিন্ন ডিস্ট্রো এর জন্য গিট ইন্সটল পদ্ধতি বিভিন্ন রকম। কিন্তু খুবই সহজ। ডিস্ট্রো অনুযায়ী terminal-এ নিচের কমান্ডগুলো লিখুন।
- Debian/Ubuntu
# apt-get install git
- Fedora
# yum install git
- Gentoo
# emerge --ask --verbose dev-vcs/git
- Arch Linux
# pacman -S git
- FreeBSD
$ cd /usr/ports/devel/git
$make install
- Solaris 11 Express
$ pkg install developer/versioning/git
- OpenBSD
$ pkg_add git
গিট কনফিগার
গিট কনফিগার করার মূল উদ্দেশ্য হচ্ছে, আপনি যখন গিট এর মাধ্যমে কমিট(commit) করবেন তখন কমিটের সাথে সে আপনার তথ্য সংরক্ষণ করে রাখবে। কনফিগারেশনের সময় আপনাকে শুধু আপনার user name এবং email address বলে দিতে হবে। Windows ব্যবহারকারীরা গিট ইন্সটল করার পর কম্পিউটার ডেক্সটপে gitBash নামে একটি শর্টকাট ফাইল তৈরি হবে। সেটি খুলে তাতে নিচের কমান্ডগুলো লিখুন। Linux ব্যবহারকারীরা terminal-এ কমান্ডগুলো লিখতে পারবেন।
git config --global user.name "Your Name Here"
Your Name Here এর জায়গায় আপনার নাম লিখুন।
git config --global user.email "your_email@youremail.com"
এখানে যে email address দিবেন তা অবশ্যই আপনার সার্ভার অ্যাকাউন্টের email address এর সাথে মিল থাকতে হবে। এখন আপনার কম্পিউটারটি গিট ব্যবহার উপযোগি হয়েছে। এখন থেকে আপনি আপনার কম্পিউটারে গিটের কমান্ডগুলো কাজে লাগাতে পারবেন। আমরা আমাদের সকল কমান্ড gitBash অথবা terminal-এ লিখবো।
গিট : নতুন অফলাইন রিপোজিটরি নিয়ে কাজ করা
অফলাইনে গিট রিপোজিটরি ব্যবহার করার জন্য নিচের ধাপগুলো অনুসরন করুন
-
ধরুন, আপনি যদি একটি routine management system তৈরি করতে চান এবং আপনার রিপোজিটরি ফোল্ডারের নাম যদি rms দিতে চান , প্রথমে
mkdir rms
কমান্ড টি লিখুন। এখন cd ব্যবহার করে আপনার রিপোজিটরিতে প্রবেশ করতে লিখুন
cd rms
-
এখন
git init
কমান্ড লিখুন। এতে করে আপনার রিপোজিটরিটি গিট ব্যবহারের উপযোগি হবে এবং .git নামে একটি লুকানো ফোল্ডার তৈরি হবে। আপনার রিপোজিটরিতে .git ফোল্ডারটি তৈরি না থাকলে আপনি গিটের কমান্ডগুলো কাজে লাগাতে পারবেন না।
আপনার রিপোজিটরিটি এখন কাজের উপযুক্ত হয়েছে। আপনি এখন এতে যে কোন ধরনে ফাইল, ফোল্ডার তৈরি, সম্পাদনা ও মুছে ফেলতে পারবেন।
-
আপনার রিপোজিটরি প্রত্যেকবার স্থিতিশীল(stable) অবস্থায় পৌছলে সেগুলো Staging Area তে পাঠাতে হবে। Staging area তে পাঠানোর মানে হচ্ছে আপনি যে যে ফাইলগুলোকে নিশ্চিতভাবে রিপোজিটরিতে অন্তর্ভুক্ত করবেন তার তালিকা তৈরি করা। সে জন্য আপনাকে
git add
কমান্ড ব্যবহার করতে হবে। যদি আপনি বর্তমান সবগুলো ফাইলকে Staging area তে সংযুক্ত করতে চান তবে আপনাকেgit add *
কমান্ড ব্যবহার করতে হবে। যদি একটি ফাইকে সংযুক্ত করতে চান তবে
git add
কমান্ডের পর ফাইলের নাম লিখতে হবে। ধরুন আপনি test.txt নামে একটি ফাইল তৈরি করেছেন যা আপনি Staging area তে পাঠাতে চান। তখন আপনার কমান্ড হবেgit add test.txt
-
সর্বশেষ আপনাকে যে কাজটি করতে হবে তা হচ্ছে, আপনার staging area তে সংযুক্ত করা ফাইলগুলোকে মূল রিপোজিটরির সাথে নিশ্চতভাবে সংযুক্ত করা। সে জন্য আপনাকে
git commit
কমান্ডটি ব্যবহার করতে হবে। আপনাকে প্রত্যেক commit এর সাথে একটি বার্তা সংযুক্ত করে দিতে হবে। তখন আপনার সম্পূর্ণ কমান্ডটি হবে-git commit -a -m "Your Message"
এখানে "Your Message" এর যায়গায় অাপনি অাপনার ইচ্ছেমত যেকোন টেক্সট দিতে পারেন।
গিট : বিদ্যমান রিমোট রিপোজিটরি নিয়ে কাজ করা
অনলাইনে গিট রিপোজিটরি সংরক্ষণ করে রাখার জন্য কিছু সার্ভার রয়েছে। যাদের মধ্যে github, bitbucket অন্যতম। এই সব সার্ভারে সংরক্ষিত রিপোজিটরিগুলোকে রিমোট রিপোজিটরি বলা হয়। আপনি সাইটগুলোতে প্রবেশ করে আপনার নিজস্ব রিপোজিটরি তৈরি করতে পারবেন। একটি রিমোট রিপোজিটরি তৈরি করার পর আপনাকে সাধারণত আপনার লোকাল কম্পিউটার থেকেই সেগুলোকে সম্পাদনা করতে হবে। সম্পাদনা শেষে আবার রিমোট রিপোজিটরিতে আপলোড করে দিতে হবে। চলুন দেখা যাক, গিট ব্যবহার করে কিভাবে আমরা একটি রিমোট রিপোজিটরিকে সম্পাদনা করতে পারি।
(আমরা এখানে bitbucket ও ওয়েব ডেভেলপমেন্ট এর রিপোজিটরি নিয়ে আলোচনা করবো)
প্রথমেই আপনার রিমোট রিপোজিটরিটিকে আপনার নিজস্ব কম্পিউটারে নিয়ে আসতে হবে। এজন্য আপনাকে cd কমান্ড ব্যবহার করে আপনার কম্পিউটারের localhost এ যেতে হবে। localhost এর জন্য আপনাকে htdocs অথবা www ফোল্ডারে প্রবেশ করতে হবে।
-
ব্রাউজারের মাধ্যমে আপনার রিমোট রিপোজিটরিতে প্রবেশ করুন। সেখানে clone বাটনে ক্লিক করার পর সেখানে একটি কমান্ড দেখতে পাবেন। clone কমান্ডের দুইটি অপশন থাকে। একটি হচ্ছে https এবং অন্যটি ssh। ssh কমান্ড নির্বাচন করলে আপনার কম্পিউটারে একটি ssh key তৈরি করতে হবে। পরে সেটি আপনার সার্ভারে সংরক্ষন করতে হবে। কিন্তু https নির্বাচন করলে কোন key তৈরি করতে হবে না। চলুন দেখে নেয়া যাক, কিভাবে ssh key তৈরি করতে হয়-
terminal এ ssh-keygen কমান্ডটি লিখুন। এতে করে আপনার কম্পিউটারের home ফোল্ডারে লুকানো একটি .ssh ফোল্ডার তৈরি হবে এবং একটি idrsa.pub ফাইল তৈরি হবে। idrsa.pub ফাইলটি খুলুন এবং এর ভিতরের লেখাগুলো copy করুন।
আপনার সার্ভার account এ প্রবেশ করুন। সেখান থেকে manage account লিংকে(link) প্রবেশ করুন। এরপর সেখান থেকে ssh key লিংকে প্রবেশ করে আপনার key টি paste করুন। এরপর সংরক্ষন করে বের হয়ে আসুন।
সার্ভার একাউন্ট(account) থেকে clone কমান্ডটি copy করে terminal এ paste করুন।
আপনার clone কমান্ডটি যদি https এর হয় তাহলে আপনার কাছে আপনার একাউন্ট এর user name এবং password চাইবে। সঠিক তথ্য দিলে আপনার সার্ভারের রিপোজিটরিটি আপনার নিজস্ব কম্পিউটারে ক্লোন(clone) হয়ে যাবে। আপনার localhost এ প্রবেশ করলে সার্ভারের রিপোজিটরির নামে একটি ফোল্ডার দেখবেন। এটাই আপনার নিজস্ব কম্পিউটারে রিমোট রিপোজিটরির ক্লোন।
-
এখন অফলাইনে থেকেই আপনার রিপোজিটরিতে কাজ করুন। এরপর আপনি যখনি আপনার রিমোট রিপোজিটরিতে আপনার কোড(code) সংযুক্ত করতে চাইবেন তখন আপনাকে কিছু কমান্ড ব্যবহার করতে হবে। সেগুলো নিচে দেয়া হলো।
- আপনার রিপোজিটরি প্রত্যেকবার স্থিতিশীল(stable) অবস্থায় পৌছলে সেগুলো Staging Area তে পাঠাতে হবে। Staging area তে পাঠানোর মানে হচ্ছে আপনি যে যে ফাইলগুলোকে নিশ্চিতভাবে রিপোজিটরিতে অন্তর্ভুক্ত করবেন তার তালিকা তৈরি করা। সে জন্য আপনাকে git add কমান্ড ব্যবহার করতে হবে। যদি আপনি বর্তমান সবগুলো ফাইলকে Staging area তে সংযুক্ত করতে চান তবে আপনাকে
git add *
কমান্ড ব্যবহার করতে হবে। যদি একটি ফাইকে সংযুক্ত করতে চান তবে git add কমান্ডের পর ফাইলের নাম লিখতে হবে। ধরুন আপনি test.txt নামে একটি ফাইল তৈরি করেছেন যা আপনি Staging area তে পাঠাতে চান। তখন আপনার কমান্ড হবে
git add test.txt
- আপনার staging area তে সংযুক্ত করা ফাইলগুলোকে মূল রিপোজিটরির সাথে নিশ্চতভাবে সংযুক্ত করা। সে জন্য আপনাকে git commit কমান্ডটি ব্যবহার করতে হবে। আপনাকে প্রত্যেক commit এর সাথে একটি বার্তা সংযুক্ত করে দিতে হবে। তখন আপনার সম্পূর্ণ কমান্ডটি হবে-
git commit -a -m “Your Message”
- এখন কমিট(commit) করা ফাইলগুলোকে রিমোট রিপোজিটরিতে সংযুক্ত করতে আপনাকে git push কমান্ডটি ব্যবহার করতে হবে। আপনি কোন ব্রাঞ্চ(branch (branch সম্পর্কে অন্য টিউটরিয়ালে আলোচনা করা হবে))-এ ফাইল সংযুক্ত তাও বলে দিতে হবে। আমরা আমাদের ফাইল master branch এ সংযুক্ত করবো। সম্পূর্ণ কমান্ডটি নিচে দেয়া হলো।
git push origin master
এখানে origin হচ্ছে রিমোট রিপোজিটরির নাম। যে রিমোট রিপোজিটরি থেকে ফাইল ক্লোন করা হয় তার নাম সাধারণত origin দেয়া থাকে।
গিট : একই রিপোজিটরিতে একাধিক ডেভেলপার
সাধারণত আমরা যখন কোন প্রজেক্ট বা রিপোজিটরি নিয়ে একটি টিমে(team) কাজ করি তখন প্রজেক্ট ব্যবস্থাপনাটা একটু জটিল হয়ে যায়। বিশেষ করে একই ফাইলে একাধিক ডেভেলপার কাজ করা। এই সমস্যার সমাধানের জন্য গিট যে পদ্ধতি ব্যবহার করেছে তা এক কথায় অসাধারণ। কোন কাজ অথবা কোড না হারিয়েই একই ফাইলে কাজ করতে পারবেন অসংখ্য ডেভেলপার। একটি রিপোজিটরি নিয়ে অসংখ্য ডেভেলপার বিচ্ছিন্নভাবে কাজ করলেও সবাই সংযুক্ত থাকতে পারবেন গিট এর মাধ্যমে। কথাটা শুনতে খাপছাড়া মনে হলেও এটাই সত্যি। তাহলে দেরি না করে চলুন দেখা যাক কিভাবে একই রিপোজিটরিতে অসংখ্য ডেভেলপার কাজ করতে পারবেন। আমরা এখানে যে পদ্ধতি নিয়ে আলোচনা করবো তা অধিকাংশ ওপেনসোর্স(opensource) রিপোজিটরিতে ব্যবহার করা হয়।
- প্রথমেই আমাদেরকে এমন একটি রিমোট রিপোজিটরি তৈরি করতে হবে যা কেন্দ্রীয় রিপোজিটরি হিসেবে ব্যবহার করা হবে। আপনি যদি বিনামূল্যে github(একটি গিট রিপোজিটরি সার্ভার) ব্যবহার করেন তাহলে যে কেউ আপনার রিপোজিটরিতে read access পাবে। কিন্তু bitbucket ব্যবহার করলে আপনি যদি রিপোজিটরি public না করে দেন তাহলে কেউ দেখতে পাবে না। চাইলে আপনি private রিপোজিটরিতেও আপনার পছন্দনীয় ব্যক্তিকে read, write অথবা admin access দিতে পারবেন। তাই আপনি যে সকল ডেভেলপারকে আপনার রিপোজিটরিতে সংযুক্ত করবেন তাদেরকে read access দিন।
-
ফোর্ক(fork): admin ব্যতিত যে সকল ডেভেলপার একই রিপোজিটরিতে কাজ করবেন তাদেরকে কেন্দ্রীয় বা মূল রিপোজিটরিতে Fork করতে হবে। ফোর্ক মানে হচ্ছে ডেভেলপারের সার্ভার একাউন্টে(account) মূল রিপোজিটরির মত একটি স্বতন্ত্র রিপোজিটরি তৈরি করা। ফোর্ক করার পর ডেভেলপার যে রিপোজিটরি তৈরি করবেন তা একান্তই তার নিজস্ব। এতে মূল রিপোজিটরির সাথে দৃশ্যত কোন সম্পর্ক থাকবে না। পরবর্তীতে আমরা চাইলে মূল রিপোজিটরির সাথে সংযোগ দিতে পারবো। একটি রিপোজিটরি ফোর্ক করা খুবই সহজ-
- কেন্দ্রীয় রিপোজিটরিতে প্রবেশ করুন – Fork বাটনে(button) ক্লিক করুন – প্রয়োজনীয় তথ্য পূরণ করে submit করুন ডেভেলপার এখন একটি নিজস্ব রিপোজিটরির মালিক। :)
- এখন ডেভেলপার তার নিজস্ব রিপোজিটরিতে নতুন যে কোন feature নিয়ে কাজ করতে পারবেন। করতে পারবেন যে কোন ধরনের সম্পাদনা। কাজতো হলো কিন্তু এবার এত পরিশ্রমের কাজ কিভাবে মূল রিপোজিটরির সাথে সংযুক্ত করবো? খুবই সহজ–
- Compare: কোন কোন রিমোট রিপোজিটরি সার্ভারে আপনার করা কাজকে compare করার সুযোগ রাখা হয়েছে। চাইলে আপনি দেখে নিতে পারেন মূল রিপোজিটরির সাথে আপনি কি সংযোজন-বিয়োজন করেছেন। compare করার জন্য ডেভেলপার তার রিপোজিটরি পাতায় compare বাটনে ক্লিক করুন। দেখে নিন আপনার কাজের বর্ণনা।
- Pull Request: আপনার কাজগুলো মূল রিপোজিটরিতে অন্তর্ভুক্ত করার জন্য মূল রিপোজিটরিতে একটি Pull Request পাঠাতে হবে। এতে করে মূল রিপোজিটরিতে ডেভেলপারের কাজ সংযুক্ত করার জন্য একটি বার্তা প্রেরণ করা হবে। admin চাইলে ডেভেলপারের কাজ গ্রহন অথবা বাতিল করতে পারবেন। ডেভেলপার শুধু তার কাজ গ্রহন করা হয়েছে কি বাতিল করা হয়েছে এই মর্মে একটি বার্তা পাবেন। Pull Request পাঠানোর জন্য ডেভেলপার তার রিপোজিটরি পাতায় pull request বাটনে ক্লিক করুন।
এখন এডমিন তার মূল রিপোজিটরিতে একটি নতুন Pull Request পাবেন। কাজ পর্যবেক্ষণের পর তা গ্রহন করার মত হলে মূল রিপোজিটরির সাথে Merge করে নেবেন। উপরের যে ধাপগুলো বর্ণনা করা হয়েছে সেগুলো সম্পূর্ণ সার্ভারভিত্তিক। আপনি চাইলে সার্ভারের ওয়েব সাইটে প্রবেশ না করে গিট কমান্ড এর মাধ্যমে সরাসরি আপনার নিজস্ব কম্পিউটার থেকে ডেভেলপারদের কাজ পর্যবেক্ষণ করতে পারবেন। সেজন্য আপনাকে জানতে হবে কিভাবে আপনি একাধিক রিমোট রিপোজিটরির সাথে সংযুক্ত হবেন। আমরা আগামী টিউটরিয়ালে এ বিষয়ে আলোচনা করবো, ইনশাআল্লাহ।
গিট : একাধিক রিমোট রিপোজিটরির সাথে সংযোগ
একই রিপোজিটরিতে একাধিক ডেভেলপার কাজ করলে একজন ডেভেলপার অন্য একজন ডেভেলপারের কাজ pull করার প্রয়োজন হতে পারে। এছাড়াও admin যখন কোন ডেভেলপারের কাজ পর্যবেক্ষণ করবেন তখন ঐ ডেভেলপারের রিপোজিটরির সাথে admin এর রিপোজিটরির সংযোগ দিতে হবে। চলুন দেখে নেয়া যাক কিভাবে রিমোট রিপোজিটরির সাথে সংযোগ দেয়া যায়। রিমোট রিপোজিটরির সাথে সংযোগ দেয়ার জন্য আমাদেরকে git remote কমান্ডটি ব্যবহার করতে হবে। সম্পূর্ণ কমান্ডটি নিচে দেয়া হলো-
git remote add name server-address
এখানে name এর জায়গায় আপনি রিমোট রিপোজিটরিটিকে যে নামে ডাকতে চান সে নাম হবে। server-address এর জায়গায় রিমোট রিপোজিটরিটির address দিতে হবে। ধরুন আমরা একটি কেন্দ্রীয় রিপোজিটরি তৈরি করলাম যার নাম হচ্ছে rms এবং রিপোজিটরিটির address হচ্ছে https://bitbucket.org/precursortechnology/rms.git । এখন এতে যতজন ডেভেলপার কাজ করবে সবাই এই রিপোজিটরিটি fork করতে হবে (fork সম্পর্কে জানতে দেখুন)। এখন ডেভেলপাররা যদি তাদের রিপোজিটরিকে কেন্দ্রীয় রিপোজিটরির(https://bitbucket.org/precursortechnology/rms.git) সাথে সংযোগ দিতে চান তাহলে তাদেরকে লিখতে হবে
git remote add upstream
https://bitbucket.org/precursortechnology/rms.git এখানে আমরা কেন্দ্রীয় রিপোজিটরিকে চেনার জন্য upstream নাম ব্যবহার করেছি। আপনি চাইলে অন্য যে কোন নাম ব্যবহার করতে পারেন। এখন কোন ডেভেলপার যদি কেন্দ্রীয় রিপোজিটরির তথ্য pull করতে চান তাহলে তাকে লিখতে হবে
git pull upstream master
pull করে মানে হচ্ছে ঐ রিপোজিটরির সর্বশেষ আপডেটগুলো আপনার রিপোজিটরির সাথে একীভূত করে নেয়া। pull কমান্ড দিয়ে মূলত দুটি কাজ করা হয়। প্রথমে রিমোট রিপোজিটরিটির তথ্যগুলো fetch করে নেয়া হয় এবং পরে সেগুলো লোকাল রিপোজিটরির সাথে merge করা হয়। উপরের কমান্ড দিয়ে আমরা upstream নামক রিমোট রিপোজিটরির master branch(ব্রাঞ্চ নিয়ে অন্য টিউটরিয়ালে আলোচনা করা হবে)-এর সাথে নিজেদের repository merge করে নিলাম। admin যদি কোন ডেভেলপারের সাথে সংযুক্ত হতে চান তাহলে তাকেও উপরের ধাপগুলো অনুসরণ করতে হবে। একটি রিপোজিটরি চাইলে একাধিক রিমোট রিপোজিটরির সাথে সংযুক্ত হতে পারবে।
গিট-ফ্লও পরিচিতি(Git-flow introduction)
গিট-ফ্লও আসলে একটা শাখা(branching) মডেল, যেটা Vincent Driessen নামের একজন লোক সর্বপ্রথম বানিয়েছেন। এটা মলুত গিটের উপর নির্ভর করে বানানো হয়েছে। এর সবচেয়ে বড় সুবিধা হল একাধিক ডেভেলপার একসাথে একটা বড় প্রোজেক্ট নির্ভেজাল ভাবে কাজ করতে পারে।
কিন্তু, গিট-ফ্লও নিয়ে কাজ করতে হলে আগে, গিটের উপর ভাল দখল থাকতে হবে। গিটের শাখা (branching) কিভাবে কাজ করে সেটা ভাল করে জানতে হবে। আর এই ক্ষেত্রে, কমান্ড লাইনে (command line) এ কাজ করা সবার আগে আবশ্যক।
গিট-ফ্লও ইন্সটলেশন এবং কনফিগারেশন
*গিট-ফ্লও ইন্সটলেশন *
-
ডেবিয়ান নির্ভরশীল লিনাক্স সিস্টেমে গিট-ফ্লও (
git-flow
) ইন্সটল করার জন্য নিছের কমান্ডটি রান করুন$ sudo apt-get install git-flow
-
ফেডরা নির্ভরশীল লিনাক্স সিস্টেমে গিট-ফ্লও (
git-flow
) ইন্সটল করার জন্য নিছের কমান্ডটি রান করুন$ yum install gitflow
-
অ্যাপল নির্ভরশীল ম্যাক সিস্টেমে গিট-ফ্লও ইন্সটল করার জন্য নিছের কমান্ড রান করুন
$ brew install git-flow
-
উইন্ডোজ সিস্টেমে গিট-ফ্লও ইন্সটল করার জন্য সবার আগে cygwin ইন্সটল করুন। এটা একটা উইন্ডোজ সিস্টেমে, লিনাক্স এনভায়রোমেন্ট তৈরি করে। এরপর নিছের কমান্ডগুলো রান করুনঃ
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
যদি এরপর
git-flow init
রান করার পর কেউ"flags: FATAL unable to determine getopt version"
এই error দেকতে পায়, তাহলেutil-linux package
ইন্সটল করতে হবেCygwin
দিয়ে।
আর বিস্তারিত জানতে উক্ত লিঙ্কে ক্লিক করুনঃ উইন্ডোজ সিস্টেমে ইন্সটল গিট-ফ্লও
গিট-ফ্লও কনফিগার
গিট-ফ্লও কনফিগারেশন করার জন্য সবার আগে একটা গিট রিপোজিটরি থাকতে হবে। আমরা যখন কোন একটা প্রোজেক্টে git init করি, থাকন সমস্ত কাজ গুলো একটা ডিফল্ট শাখা "মাস্টার(master)"
এ জমা হতে থাকে।
বিরক্ত লাগছে... চলুন আমরা এবার নিজে করিঃ
১। আগে আমরা একটা ফোল্ডার বানাবঃ
mkdir git-flow-test
২। এবার আমি একটা ফাইল বানাব git-flow-test ফোল্ডারে ডুকে।
cd git-flow-test
touch helloworld.txt
৩। এবার আমরা সবার আগে এখানে গিট (git)
রেপোজিটোরি বানাব। এজন্য আমরা এখানে নিছের কমান্ড চালবঃ
git init
৪। এখন আমরা আমাদের চেঞ্জগুলো গিটে যোগ করে একটা কমিট করব। তার জন্য নিছের কমান্ডগুলো চালাবঃ
git add .
git commit -m "initali commit with first file"
৫। এখন আমাদের সবগুলো পরিবর্তন গিটের প্রাথমিক ব্রাঞ্চ master
এ আছে। এখন আমাদের গিট রিপোজিটিরি git-flow
বানানোর জন্য তৈরি। গিট-ফ্লও বানানোর জন্য এখন আমরা নিছের কমান্ডগুলো রান করবঃ
গিট-ফ্লও ফিচার
গিট-ফ্লও ফিচার শুরু করার আগে আমরা কিছু জিনিস বানাব। যেমন আমরা কোন প্রোজেক্ট করার আগে কোন একটা প্রোজেক্ট ম্যানেজমেন্ট সিস্টেমে, প্রোজেক্ট রিলেটেড সব ফিচার (feature), বাগ (bug) ইত্যাদি আমরা বিস্তারিত লেখে রাখি। এরপর আমরা বিভিন্ন ডেভেলপারকে আমরা তা assign করে দেই।
ধরি আমাদের প্রোজেক্টের নামে হেলো "গিট-ফ্লও (Hello Git-Flow)"
আমাদের কাছে নিন্মলিখিত ফিচারগুলো আছেঃ
- HGT-01: Bootstrap Hello Git-Flow project
- HGT-02: Create login with Username and Password
- HGT-03: Create user signup
- HGT-04: Create forget Password
- HGT-05: Homepage with login and Signup option
এখন, আমরা একটা একটা করে ফিচারে কাজ শুরু করব,গিট-ফ্লও (git-flow) ফিচার
ব্যবহার করে।
ধাপ-০১
সবার আগে আমরা HGT-01
ফিচার নিয়ে কাজ শুরু করব। এজন্য আমরা কমান্ড লিখব
git-flow feature start HGT-01
এরপর আমরা নিছের ছবির মত একটা মেসেজ দেকতে পাব,
এখানে আমরা যেটা দেখতে পারছি, তা হোল, সবার আগে develop
নামে যে ব্রাঞ্চ (branch) আছে, তার উপর নির্ভর করে একটা নতুন ব্রাঞ্চ (branch) feature/HGT-01
তৈরি হয়েছে। এরপর স্বয়ংক্রিয় ভাবে,ওই ব্রাঞ্চে (branch) পয়েন্ট করে ফেলেছে।
ধাপ-০২
এখন আমরা ফিচার ডেভেলপমেন্টের কাজ করব এবং ক্রমান্বয়ে কমিট করব, যেভাবে আমরা গিটে (git) কমিট করতাম। আমরা যত পরিবর্তন করব, সবই আমাদের বর্তমান ফিচার (featuere)
ব্রাঞ্চ এ যোগ হতে থাকবে। ধরি,
একটা নতুন ফাইল বানাব কারেন্ট ফিচারের জন্য
touch project-config.php
এবার এই ফাইলে কিছু পরিবর্তন করব, মানে কিছু লেখা যোগকরব
nano project-config.php
এবার আমরা ফাইলটা গিটে যোগ করব এবং গিটে কমিট করব
git add project-config.php
git commit -m "project configuration file is added"
ধাপ-০৩
এবার ধরে নিলাম আমাদের ফিচার feature
ডেভেলপমেন্টের কাজ শেষ। এখন আমরা গিট-ফ্লও দিয়ে আমাদের ফিচার কমপ্লিট করব।
git-flow feature finish HGT-01
এই কমান্ড চালানোর পর আমরা নিছের ছবির মত একটা মেসেজ দেকতে পারব
গিট-ফ্লও ফিচার পাবলিশ
আমরা যদি মনে করি, কন একটা ফিচার ব্রাঞ্চে অন্য কেউ কাজ করবে, তাহলে আমারা চাইলে গিটে আপ করে দিতে পারি।এজন্য আমরা নিচের কমান্ডটা রান করবঃ
git-flow feature publish HGT-01
এই কমান্ড চালানোর পর নিচের মত একটা স্ক্রীন দেখা যাবে।
গিট-ফ্লও রিলিস
গিট-ফ্লও এর আরেকটি প্রয়োজনীয় কমান্ড হোল গিট-ফ্লও রিলিস। এটা দিয়ে আমরা মূলত একটা development branch থেকে production সার্ভারে দেয়ার মত একটা রিলিস তৈরি করি। এটা দিয়ে আমরা খুব সহজে, একটা রিলিস এর নাম্বার দিতে পারি, যেন খুব সহজে আমরা আবার পরবর্তী কোন রিলিএসে ব্যাক করতে পারি।
আমরা যদি গিট-ফ্লও রিলিসের সিনট্যাক্সজানতে চাই, তাহলে আমরা কমান্ড লাইনে গিয়ে নিচের কমান্ড টাইপ করলে হবেঃ
Git-flow release (press enter)
এবার আমরা নিচের মত একটা স্ক্রীন দেখতে পাব।
এখানে তিনটা টার্ম আছে, যা জানতে হবেঃ
1. <name> : রিলিসের নাম। যেমনঃ rel-v1.0
2. [<base>]: এটা একটা ব্রাঞ্চের নাম। মানে আমরা যদি development branch থেকে ব্রাঞ্চ তৈরি না করে, অন্য কোনব্রাঞ্চ থেকে রিলিস তৈরি করতে চাই, তখন ওই ব্রাঞ্চ এর নাম দিব।
এবার আমরা একটা রিলিস তৈরি করব। আমরা ধরে নিচ্ছি, আমাদের ব্রাঞ্চ development। তাহলে আর দেরি না করে নিচের কমান্ডটা রান করি ঃ
git-flow release start rel-v1.0
এখন আমরা নিচের মত একটা স্ক্রীন দেখতে পাবোঃ
আমরা এখন দেখতে পেলাম একটা নতুন ব্রাঞ্চ rel-v1.0নামের একটা নুতুন ব্রাঞ্চ তৈরি হয়েছে।
আমরা এখন জেতা করতে পারি, এই ব্রাঞ্চটাকে একটা টেস্টিং সার্ভারে দিয়ে দেতে পারি। একদল QA দলকে বলতে পারি, টেস্টিং করতে। যখন, টেস্টিং শেষ হবে, আমরা রিলিসটাকে finish করে দিতে পারি।
এখন জানতে হবে, রিলিস শেষ(finish) করলে কি হয় ঃ আমরা যখনই কোন রিলিস শেষ করব, গিট-ফ্লও স্বয়ংক্রিয়ভাবে রিলিস ব্রাঞ্চের সকল কোড development branch এবং production branch (master এখানে production branch) এ merge করে দেয়।
এখন আর কথা না বাড়িয়ে, কমান্ডটা রান করে দেখিঃ
git-flow release finish rel-v1.0
এখন আমরা নিচের মত একটা স্ক্রীন দেখতে পাবোঃ
গিট মারজ মেসেজ
গিট ট্যাগ মেসেজ গিট ফিনিশ শেষ
এখন আমরা একটু খেয়াল করে summary of Actions এর দিকে খেয়াল করে দেখি। এখানে আসলে গিট-ফ্লও কি কি কাজ করেছে, তার একটা সারাংশ তুলে ধরেছে। এবং শব শেষে মাস্টার ব্রাঞ্চ এ শিফট করছে। মানে, rel-v1.0 এর সকল কোড এখন (master) মাস্টার ব্রাঞ্চেও আছে এবং development ব্রাঞ্চে ও আছে।