রেপো কমান্ড রেফারেন্স

একাধিক রিপোজিটরির মধ্যে কাজ সহজ করার মাধ্যমে রিপো গিট-এর পরিপূরক হিসেবে কাজ করে। রিপো এবং গিট-এর মধ্যকার সম্পর্ক জানতে, সোর্স কন্ট্রোল টুলস দেখুন। রিপো সম্পর্কে আরও বিস্তারিত জানতে, রিপো রিডমি (README) দেখুন।

রিপো ব্যবহারের ধরণ নিম্নরূপ:

repo command options

ঐচ্ছিক উপাদানগুলো বন্ধনীতে [] দেখানো হয়েছে। উদাহরণস্বরূপ, অনেক কমান্ড আর্গুমেন্ট হিসেবে project-list গ্রহণ করে। আপনি project-list নামগুলোর একটি তালিকা অথবা প্রজেক্টগুলোর স্থানীয় সোর্স ডিরেক্টরিগুলোর পাথের একটি তালিকা হিসেবে নির্দিষ্ট করতে পারেন:

repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]

help

repo help

repo কমান্ড সম্পর্কে সাহায্য প্রদান করে। একটি কমান্ডকে অপশন হিসেবে নির্দিষ্ট করে আপনি কোনো নির্দিষ্ট Repo কমান্ড সম্পর্কে বিস্তারিত তথ্য দেখতে পারেন:

repo help command

উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি init কমান্ডের একটি বিবরণ এবং অপশনগুলির তালিকা প্রদান করে:

repo help init

অথবা, কোনো কমান্ডের শুধুমাত্র উপলব্ধ অপশনগুলোর তালিকা দেখতে, চালান:

repo command --help

উদাহরণস্বরূপ:

repo init --help

init

repo init -u url [options]

বর্তমান ডিরেক্টরিতে রিপো ইনস্টল করে। এই কমান্ডটি রিপো সোর্স কোড এবং স্ট্যান্ডার্ড অ্যান্ড্রয়েড ম্যানিফেস্ট ফাইলগুলির জন্য গিট রিপোজিটরি সহ একটি .repo/ ডিরেক্টরি তৈরি করে।

বিকল্পসমূহ:

  • -u : একটি URL নির্দিষ্ট করুন যেখান থেকে ম্যানিফেস্ট রিপোজিটরি সংগ্রহ করা হবে। সাধারণ ম্যানিফেস্টটি https://android.googlesource.com/platform/manifest -এ পাওয়া যায়।

  • -m : রিপোজিটরির মধ্যে একটি ম্যানিফেস্ট ফাইল নির্বাচন করুন। যদি কোনো ম্যানিফেস্ট নাম নির্বাচন করা না হয়, তাহলে ডিফল্ট হলো default.xml

  • -b : একটি রিভিশন নির্দিষ্ট করুন, অর্থাৎ একটি নির্দিষ্ট manifest-branch

বাকি সমস্ত Repo কমান্ডের জন্য, বর্তমান ওয়ার্কিং ডিরেক্টরি অবশ্যই .repo/ এর প্যারেন্ট ডিরেক্টরি অথবা প্যারেন্ট ডিরেক্টরির একটি সাবডিরেক্টরি হতে হবে।

sync

repo sync [project-list]

এটি আপনার স্থানীয় পরিবেশে নতুন পরিবর্তনগুলি ডাউনলোড করে এবং ওয়ার্কিং ফাইলগুলি আপডেট করে, যা মূলত সমস্ত গিট রিপোজিটরি জুড়ে git fetch কাজ সম্পন্ন করে। আপনি যদি কোনো আর্গুমেন্ট ছাড়া repo sync চালান, তবে এটি সমস্ত প্রোজেক্টের ফাইলগুলি সিঙ্ক্রোনাইজ করে।

আপনি যখন repo sync চালান, তখন এই ঘটনাটি ঘটে:

  • যদি প্রজেক্টটি আগে কখনো সিনক্রোনাইজ করা না হয়ে থাকে, তাহলে repo sync হলো git clone এর সমতুল্য; এর মাধ্যমে রিমোট রিপোজিটরির সমস্ত ব্রাঞ্চ লোকাল প্রজেক্ট ডিরেক্টরিতে কপি হয়ে যায়।

  • যদি প্রজেক্টটি আগে সিঙ্ক্রোনাইজ করা হয়ে থাকে, তাহলে repo sync এর সমতুল্য হলো:

    git remote update
    git rebase origin/branch
    

    এখানে branch হলো লোকাল প্রজেক্ট ডিরেক্টরিতে থাকা বর্তমান চেক-আউট করা ব্রাঞ্চ। যদি লোকাল ব্রাঞ্চটি রিমোট রিপোজিটরির কোনো ব্রাঞ্চকে ট্র্যাক না করে, তাহলে প্রজেক্টটির কোনো সিনক্রোনাইজেশন হয় না।

repo sync সফলভাবে সম্পন্ন হওয়ার পর, নির্দিষ্ট প্রজেক্টগুলোর কোড হালনাগাদ হয়ে যায় এবং রিমোট রিপোজিটরির কোডের সাথে সিঙ্ক হয়ে যায়।

মূল বিকল্পসমূহ:

  • -c : সার্ভার থেকে শুধুমাত্র বর্তমান ম্যানিফেস্ট শাখাটি আনুন।
  • -d : নির্দিষ্ট প্রজেক্টগুলোকে ম্যানিফেস্ট রিভিশনে ফিরিয়ে নিয়ে যান। এই অপশনটি তখন সহায়ক হয় যখন প্রজেক্টটি কোনো টপিক ব্রাঞ্চে থাকে, কিন্তু সাময়িকভাবে ম্যানিফেস্ট রিভিশনটির প্রয়োজন হয়।
  • -f : কোনো একটি প্রজেক্ট সিঙ্ক হতে ব্যর্থ হলেও অন্যান্য প্রজেক্ট সিঙ্ক করা চালিয়ে যান।
  • -j threadcount : দ্রুত কাজ সম্পন্ন করার জন্য সিঙ্ককে থ্রেডগুলোর মধ্যে ভাগ করে দিন। খেয়াল রাখবেন যেন আপনার মেশিনের উপর অতিরিক্ত চাপ না পড়ে—অন্যান্য কাজের জন্য কিছু সিপিইউ সংরক্ষিত রাখুন। উপলব্ধ সিপিইউ-এর সংখ্যা দেখতে, প্রথমে nproc --all চালান।
  • -q : স্ট্যাটাস বার্তা দমন করে নীরবে চালান।
  • -s : বর্তমান ম্যানিফেস্টের manifest-server এলিমেন্ট দ্বারা নির্দিষ্ট করা একটি পরিচিত ভালো বিল্ডের সাথে সিঙ্ক করুন।

আরও বিকল্পের জন্য, repo help sync চালান।

upload

repo upload [project-list]

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

নির্বাচিত শাখাগুলিতে করা সমস্ত কমিট এরপর একটি HTTPS সংযোগের মাধ্যমে Gerrit-এ পাঠানো হয়। আপলোড অনুমোদন সক্রিয় করতে আপনাকে একটি HTTPS পাসওয়ার্ড কনফিগার করতে হবে। HTTPS-এ ব্যবহারের জন্য একটি নতুন ইউজারনেম ও পাসওয়ার্ড তৈরি করতে, পাসওয়ার্ড জেনারেটর-এ যান।

যখন গেরিট তার সার্ভারের মাধ্যমে অবজেক্ট ডেটা গ্রহণ করে, তখন এটি প্রতিটি কমিটকে একটি পরিবর্তনে পরিণত করে, যাতে পর্যালোচকরা একটি নির্দিষ্ট কমিটে মন্তব্য করতে পারেন। একাধিক চেকপয়েন্ট কমিটকে একটি একক কমিটে একত্রিত করতে, আপলোড চালানোর আগে git rebase -i ব্যবহার করুন।

আপনি যদি কোনো আর্গুমেন্ট ছাড়া repo upload চালান, তাহলে এটি আপলোড করার জন্য সমস্ত প্রোজেক্টে পরিবর্তনগুলো খুঁজে বের করে।

আপলোড করার পরে পরিবর্তনগুলি সম্পাদনা করতে, আপনার স্থানীয় কমিটগুলি আপডেট করার জন্য git rebase -i অথবা git commit --amend ব্যবহার করুন। আপনার সম্পাদনা সম্পূর্ণ হলে:

  • যাচাই করুন যে আপডেট করা ব্রাঞ্চটিই বর্তমানে চেক আউট করা ব্রাঞ্চ।
  • পরিবর্তন মেলানোর এডিটরটি খুলতে repo upload --replace PROJECT ব্যবহার করুন।
  • সিরিজের প্রতিটি কমিটের জন্য, বন্ধনীর ভিতরে গেরিট চেঞ্জ আইডিটি লিখুন:

    # Replacing from branch foo
    [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to look up one specific...
    [ 2829 ] ec18b4ba Update proto client to support patch set replacements
    # Insert change numbers in the brackets to add a new patch set.
    # To create a new change record, leave the brackets empty.
    

আপলোড সম্পন্ন হওয়ার পর, পরিবর্তনগুলোর জন্য একটি অতিরিক্ত প্যাচ সেট যুক্ত হয়।

শুধুমাত্র বর্তমানে চেক আউট করা গিট ব্রাঞ্চ আপলোড করতে, --current-branch (বা --cbr ) ফ্ল্যাগটি ব্যবহার করুন।

সম্পর্কিত পরিবর্তনের জন্য, সমস্ত CL একই টপিকে রাখুন। আপলোড করার সময় --topic=TOPIC ব্যবহার করে একটি টপিকের নাম যোগ করুন অথবা টপিকের নাম লোকাল ব্রাঞ্চের নামে সেট করতে -t পাস করুন।

diff

repo diff [project-list]

git diff ব্যবহার করে কমিট এবং ওয়ার্কিং ট্রি-এর মধ্যেকার অমীমাংসিত পরিবর্তনগুলো দেখায়।

download

repo download target change

রিভিউ সিস্টেম থেকে নির্দিষ্ট পরিবর্তনটি ডাউনলোড করে আপনার প্রোজেক্টের লোকাল ওয়ার্কিং ডিরেক্টরিতে উপলব্ধ করে।

উদাহরণস্বরূপ, ডাউনলোড করতে 23823 আপনার platform/build ডিরেক্টরিতে পরিবর্তন করুন:

repo download platform/build 23823

repo sync চালালে repo download দিয়ে পাওয়া যেকোনো কমিট মুছে যায়। অথবা আপনি git checkout m/main ব্যবহার করে রিমোট ব্রাঞ্চটি চেক আউট করতে পারেন।

forall

repo forall [project-list] -c command

প্রতিটি প্রজেক্টে প্রদত্ত শেল কমান্ডটি কার্যকর করে। repo forall দ্বারা নিম্নলিখিত অতিরিক্ত এনভায়রনমেন্ট ভেরিয়েবলগুলো উপলব্ধ করা হয়:

  • REPO_PROJECT প্রজেক্টের অনন্য নামে সেট করা হয়।
  • REPO_PATH হলো ক্লায়েন্টের রুটের সাপেক্ষে পাথ।
  • REPO_REMOTE হলো ম্যানিফেস্ট থেকে নেওয়া রিমোট সিস্টেমের নাম।
  • REPO_LREV হলো ম্যানিফেস্ট থেকে নেওয়া রিভিশনের নাম, যা একটি লোকাল ট্র্যাকিং ব্রাঞ্চে রূপান্তরিত হয়। যদি আপনাকে স্থানীয়ভাবে চালানো কোনো গিট কমান্ডে ম্যানিফেস্ট রিভিশনটি পাঠাতে হয়, তাহলে এই ভেরিয়েবলটি ব্যবহার করুন।
  • REPO_RREV হলো ম্যানিফেস্টে লেখা রিভিশনের নাম।

বিকল্পসমূহ:

  • -c : কার্যকর করার জন্য কমান্ড এবং আর্গুমেন্ট। কমান্ডটি /bin/sh এর মাধ্যমে মূল্যায়ন করা হয় এবং এর পরের যেকোনো আর্গুমেন্ট শেল পজিশনাল প্যারামিটার হিসেবে পাস করা হয়।
  • -p : নির্দিষ্ট কমান্ডের আউটপুটের আগে প্রোজেক্ট হেডারগুলো দেখান। এটি করার জন্য, কমান্ডের stdin, stdout, এবং stderr স্ট্রিমগুলোর সাথে পাইপ যুক্ত করা হয় এবং সমস্ত আউটপুটকে একটি অবিচ্ছিন্ন স্ট্রিমে পাইপ করা হয়, যা একটি একক পেজার সেশনে প্রদর্শিত হয়।
  • -v : কমান্ডটি stderr-এ যে বার্তাগুলো লেখে, সেগুলো দেখান।

prune

repo prune [project-list]

ইতিমধ্যে মার্জ করা টপিকগুলো ছাঁটাই (মুছে) করে।

start

repo start branch-name [project-list]

ম্যানিফেস্টে উল্লেখিত রিভিশন থেকে উন্নয়নের জন্য একটি নতুন শাখা শুরু করে।

BRANCH_NAME আর্গুমেন্টটি প্রজেক্টগুলোতে আপনি যে পরিবর্তনটি করতে চাইছেন তার একটি সংক্ষিপ্ত বিবরণ প্রদান করে। যদি আপনি না জানেন, তবে default নামটি ব্যবহার করার কথা বিবেচনা করতে পারেন।

project-list আর্গুমেন্টটি নির্দিষ্ট করে দেয় কোন কোন প্রজেক্ট এই টপিক ব্রাঞ্চে অংশগ্রহণ করবে।

status

repo status [project-list]

নির্দিষ্ট প্রতিটি প্রোজেক্টে ওয়ার্কিং ট্রি-কে স্টেজিং এরিয়া (ইনডেক্স) এবং এই ব্রাঞ্চের সর্বশেষ কমিটের (হেড) সাথে তুলনা করে। এই তিনটি অবস্থার মধ্যে পার্থক্য থাকলে, প্রতিটি ফাইলের জন্য একটি সারসংক্ষেপ লাইন প্রদর্শন করে।

শুধুমাত্র বর্তমান ব্রাঞ্চের স্ট্যাটাস দেখতে, repo status . চালান। স্ট্যাটাসের তথ্য প্রজেক্ট অনুযায়ী তালিকাভুক্ত করা হয়। প্রজেক্টের প্রতিটি ফাইলের জন্য একটি দুই-অক্ষরের কোড ব্যবহার করা হয়।

প্রথম কলামে একটি বড় হাতের অক্ষর নির্দেশ করে যে স্টেজিং এরিয়াটি সর্বশেষ কমিটেড অবস্থা থেকে কীভাবে ভিন্ন।

চিঠি অর্থ বর্ণনা
- কোনো পরিবর্তন নেই HEAD এবং ইনডেক্সে একই
একটি যোগ করা হয়েছে HEAD-এ নেই, সূচীতে
এম পরিবর্তিত HEAD-এ, সূচীতে পরিবর্তিত
ডি মুছে ফেলা হয়েছে HEAD-এ, index-এ নয়
আর নাম পরিবর্তন করা হয়েছে HEAD-এ নেই, ইনডেক্সে পাথ পরিবর্তিত হয়েছে
সি অনুলিপি করা হয়েছে HEAD-এ নেই, ইনডেক্সের অন্য একটি থেকে কপি করা হয়েছে
টি মোড পরিবর্তন করা হয়েছে HEAD এবং ইনডেক্সে একই বিষয়বস্তু, মোড পরিবর্তন করা হয়েছে।
ইউ অসংযুক্ত HEAD এবং সূচকের মধ্যে দ্বন্দ্ব; সমাধান প্রয়োজন।

দ্বিতীয় কলামে একটি ছোট হাতের অক্ষর দিয়ে বোঝানো হয় যে ওয়ার্কিং ডিরেক্টরি এবং ইনডেক্সের মধ্যে পার্থক্য কী।

চিঠি অর্থ বর্ণনা
- নতুন/অপরিচিত ইনডেক্সে নেই, ওয়ার্ক ট্রি-তে আছে
এম পরিবর্তিত সূচীতে, ওয়ার্ক ট্রিতে, পরিবর্তিত
মুছে ফেলা হয়েছে ইনডেক্সে আছে, ওয়ার্ক ট্রি-তে নয়

রিপো ত্রুটিগুলি পরিচালনা করুন

git commit -a # Commit local changes first so they aren't lost
repo start branch-name # Start the branch
git reset --hard HEAD@{1} # Reset the branch so that it matches the commit before repo start
repo upload .

সেশন শুরুর সময় repo start কমান্ডটি চালানো না হলে repo: error: no branches ready for upload এই ত্রুটিটি দেখা দেয়। এটি সমাধান করতে, কমিট আইডি পরীক্ষা করুন, একটি নতুন ব্রাঞ্চ শুরু করুন এবং তারপর সেটি মার্জ করুন।

গিট রিপোজিটরি কাঠামো

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