উৎস নিয়ন্ত্রণ কর্মপ্রবাহ

অ্যান্ড্রয়েড কোড নিয়ে কাজ করার জন্য গিট (Git ) প্রয়োজন, যা একটি ওপেন-সোর্স ভার্সন কন্ট্রোল সিস্টেম, এবং রেপো (Repo) প্রয়োজন, যা গুগলের তৈরি একটি রিপোজিটরি ম্যানেজমেন্ট টুল এবং এটি গিটের উপরেই চলে। রেপো এবং গিটের মধ্যে সম্পর্ক এবং প্রতিটি টুলের সহায়ক ডকুমেন্টেশনের লিঙ্কের ব্যাখ্যার জন্য, সোর্স কন্ট্রোল টুলস (Source control tools) দেখুন।

প্রবাহ

অ্যান্ড্রয়েড ডেভেলপমেন্টে নিম্নলিখিত মৌলিক কর্মপ্রবাহ অন্তর্ভুক্ত রয়েছে:

  1. repo start ব্যবহার করে একটি নতুন টপিক ব্রাঞ্চ শুরু করুন।
  2. ফাইলগুলো সম্পাদনা করুন।
  3. git add ব্যবহার করে স্টেজ পরিবর্তন করা হয়।
  4. git commit ব্যবহার করে পরিবর্তনগুলো কমিট করুন।
  5. repo upload ব্যবহার করে রিভিউ সার্ভারে পরিবর্তনগুলো আপলোড করুন।

কাজ

অ্যান্ড্রয়েড কোড রিপোজিটরিতে Git এবং Repo নিয়ে কাজ করার ক্ষেত্রে নিম্নলিখিত সাধারণ কাজগুলো সম্পাদন করতে হয়।

আদেশ বর্ণনা
repo init একটি নতুন ক্লায়েন্ট চালু করে।
repo sync ক্লায়েন্টকে রিপোজিটরিগুলোর সাথে সিঙ্ক করে।
repo start একটি নতুন শাখা শুরু করে।
repo status বর্তমান শাখার অবস্থা দেখায়।
repo upload রিভিউ সার্ভারে পরিবর্তনগুলো আপলোড করে।
git add ফাইলগুলো পর্যায়ক্রমে সাজায়।
git commit স্টেজ করা ফাইলগুলো কমিট করে।
git branch বর্তমান শাখাগুলো দেখায়।
git branch [branch] একটি নতুন টপিক ব্রাঞ্চ তৈরি করে।
git checkout [branch] নির্দিষ্ট শাখায় HEAD সুইচ করে।
git merge [branch] [branch] -কে বর্তমান শাখায় একীভূত করে।
git diff অবিন্যস্ত পরিবর্তনগুলোর পার্থক্য দেখায়।
git diff --cached পর্যায়ক্রমিক পরিবর্তনগুলোর পার্থক্য দেখায়।
git log বর্তমান শাখার ইতিহাস দেখায়।
git log m/[codeline].. যে কমিটগুলো পুশ করা হয়নি, সেগুলো দেখায়।

রিপো ব্যবহার করে সোর্স ডাউনলোড করার বিষয়ে তথ্যের জন্য, “Downloading the Source” এবং “ Repo Command Reference” দেখুন।

ক্লায়েন্টদের সিঙ্ক্রোনাইজ করা

উপলব্ধ সকল প্রোজেক্টের ফাইলগুলো সিঙ্ক্রোনাইজ করতে:

repo sync

নির্বাচিত প্রোজেক্টগুলির ফাইলগুলি সিঙ্ক্রোনাইজ করতে:

repo sync PROJECT0 PROJECT1 ... PROJECTN

টপিক শাখা তৈরি করা

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

রিপো ব্যবহার করে একটি টপিক ব্রাঞ্চ শুরু করতে, প্রজেক্টে যান এবং চালান:

repo start BRANCH_NAME .

শেষের ডট ( . ) বর্তমান ওয়ার্কিং ডিরেক্টরিতে থাকা প্রজেক্টটিকে নির্দেশ করে।

নতুন শাখাটি তৈরি হয়েছে কিনা তা যাচাই করতে:

repo status .

টপিক শাখা ব্যবহার করে

শাখাটিকে একটি নির্দিষ্ট প্রকল্পে বরাদ্দ করতে:

repo start BRANCH_NAME PROJECT_NAME

সমস্ত প্রোজেক্টের তালিকার জন্য android.googlesource.com দেখুন। আপনি যদি ইতিমধ্যেই প্রোজেক্ট ডিরেক্টরিতে গিয়ে থাকেন, তবে বর্তমান প্রোজেক্টটি বোঝাতে শুধু একটি ডট (.) ব্যবহার করুন।

আপনার স্থানীয় কর্ম পরিবেশে অন্য শাখায় যেতে:

git checkout BRANCH_NAME

বিদ্যমান শাখাগুলির তালিকা দেখতে:

git branch

অথবা

repo branches

উভয় কমান্ডই বিদ্যমান ব্রাঞ্চগুলোর তালিকা ফেরত দেয়, যেখানে বর্তমান ব্রাঞ্চের নামের আগে একটি তারকাচিহ্ন (*) যুক্ত থাকে।

স্টেজিং ফাইল

ডিফল্টরূপে, গিট আপনার প্রোজেক্টে করা পরিবর্তনগুলো লক্ষ্য করে, কিন্তু সেগুলোর হিসাব রাখে না। আপনার পরিবর্তনগুলো সংরক্ষণ করার জন্য, আপনাকে অবশ্যই কমিটে অন্তর্ভুক্ত করার উদ্দেশ্যে সেই পরিবর্তনগুলোকে মার্ক বা স্টেজ করতে হবে।

পরিবর্তনগুলি মঞ্চস্থ করতে:

git add

এই কমান্ডটি প্রজেক্ট ডিরেক্টরির ভেতরের ফাইল বা ডিরেক্টরির জন্য আর্গুমেন্ট গ্রহণ করে। নাম শুনে মনে হতে পারে, git add শুধু গিট রিপোজিটরিতে ফাইল যোগ করে না; এটি ফাইলের পরিবর্তন এবং মুছে ফেলার কাজ স্টেজ করার জন্যও ব্যবহার করা যায়।

ক্লায়েন্টের অবস্থা দেখা

ফাইলগুলির অবস্থা তালিকাভুক্ত করতে:

repo status

আনকমিটেড সম্পাদনাগুলি (স্থানীয় সম্পাদনা যা কমিট করার জন্য চিহ্নিত করা হয়নি ) দেখতে:

repo diff

কমিট করা সম্পাদনাগুলো (অর্থাৎ কমিট করার জন্য চিহ্নিত সম্পাদনাগুলো) দেখতে, নিশ্চিত করুন যে আপনি প্রজেক্ট ডিরেক্টরিতে আছেন এবং তারপর cached আর্গুমেন্ট সহ git diff চালান:

cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached

পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করা

গিট-এ রিভিশন কন্ট্রোলের মূল একক হলো কমিট , যা সম্পূর্ণ প্রোজেক্টের ডিরেক্টরি কাঠামো এবং ফাইলের বিষয়বস্তুর একটি স্ন্যাপশট নিয়ে গঠিত। গিট-এ একটি কমিট তৈরি করতে এই কমান্ডটি ব্যবহার করুন:

git commit

কমিট মেসেজের জন্য অনুরোধ করা হলে, AOSP-তে জমা দেওয়া পরিবর্তনগুলির জন্য একটি সংক্ষিপ্ত (কিন্তু সহায়ক) বার্তা দিন। আপনি যদি কমিট মেসেজ যোগ না করেন, তাহলে কমিটটি ব্যর্থ হবে।

গেরিটে পরিবর্তন আপলোড করা হচ্ছে

সর্বশেষ সংস্করণে আপডেট করুন, তারপর পরিবর্তনটি আপলোড করুন:

repo sync
repo upload

এই কমান্ডগুলো আপনার কমিট করা পরিবর্তনগুলোর একটি তালিকা ফেরত দেয় এবং রিভিউ সার্ভারে আপলোড করার জন্য ব্রাঞ্চগুলো বেছে নিতে বলে। যদি কেবল একটিই ব্রাঞ্চ থাকে, তাহলে আপনি একটি সাধারণ y/n প্রম্পট দেখতে পাবেন।

সিঙ্ক দ্বন্দ্ব সমাধান করা

যদি repo sync কমান্ডটি সিঙ্ক কনফ্লিক্ট দেখায়:

  1. যে ফাইলগুলো মার্জ করা হয়নি (স্ট্যাটাস কোড = U), সেগুলো দেখুন।
  2. প্রয়োজন অনুযায়ী সংঘাতপূর্ণ অঞ্চলগুলো সম্পাদনা করুন।
  3. প্রাসঙ্গিক প্রজেক্ট ডিরেক্টরিতে যান। প্রভাবিত ফাইলগুলো অ্যাড ও কমিট করুন, তারপর পরিবর্তনগুলো রিবেস করুন:
    git add .
    git commit
    git rebase --continue
    
  4. রিবেস সম্পন্ন হওয়ার পর, সম্পূর্ণ সিঙ্কটি আবার শুরু করুন:
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

ক্লায়েন্টদের পরিষ্কার করা

Gerrit-এ পরিবর্তনগুলো মার্জ করার পর, আপনার লোকাল ওয়ার্কিং ডিরেক্টরি আপডেট করুন, তারপর repo prune ব্যবহার করে পুরনো টপিক ব্রাঞ্চগুলো নিরাপদে মুছে ফেলুন:

repo sync
repo prune

ক্লায়েন্ট মুছে ফেলা

যেহেতু সমস্ত স্টেট তথ্য আপনার ক্লায়েন্টে সংরক্ষিত থাকে, তাই আপনাকে কেবল আপনার ফাইল সিস্টেম থেকে ডিরেক্টরিটি মুছে ফেলতে হবে:

rm -rf WORKING_DIRECTORY

কোনো ক্লায়েন্টকে মুছে ফেললে, পর্যালোচনার জন্য আপলোড না করা যেকোনো পরিবর্তনও স্থায়ীভাবে মুছে যায়