Repo कमांड का रेफ़रंस

Repo, Git के साथ मिलकर काम करता है. इससे कई रिपॉज़िटरी में काम करना आसान हो जाता है. Repo और Git के बीच के संबंध के बारे में जानने के लिए, सोर्स कंट्रोल टूल देखें. Repo के बारे में ज़्यादा जानकारी के लिए, Repo README देखें

Repo का इस्तेमाल इस तरह किया जाता है:

repo command options

ज़रूरी नहीं कि एलिमेंट ब्रैकेट [] में दिखाए जाएं. उदाहरण के लिए, कई कमांड project-list को आर्ग्युमेंट के तौर पर लेती हैं. प्रोजेक्ट के लिए, project-list को नामों की सूची या स्थानीय सोर्स डायरेक्ट्री के पाथ की सूची के तौर पर तय किया जा सकता है:

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

मदद

repo help

repo कमांड के बारे में जानकारी देता है. किसी खास Repo कमांड के बारे में ज़्यादा जानकारी देखी जा सकती है. इसके लिए, कमांड को विकल्प के तौर पर तय करें:

repo help command

उदाहरण के लिए, यहां दिए गए निर्देश से init निर्देश के बारे में जानकारी और विकल्पों की सूची मिलती है:

repo help init

इसके अलावा, किसी निर्देश के लिए उपलब्ध विकल्पों की सूची देखने के लिए, यह निर्देश चलाएं:

repo command --help

उदाहरण के लिए:

repo init --help

init

repo init -u url [options]

यह कमांड, मौजूदा डायरेक्ट्री में Installs Repo को इंस्टॉल करती है. इस कमांड से, Repo के सोर्स कोड और स्टैंडर्ड Android मेनिफ़ेस्ट फ़ाइलों के लिए, Git रिपॉज़िटरी वाली .repo/ डायरेक्ट्री बन जाती है.

विकल्प:

  • -u: वह यूआरएल बताएं जिससे मेनिफ़ेस्ट रिपॉज़िटरी को वापस पाना है. सामान्य मेनिफ़ेस्ट https://android.googlesource.com/platform/manifest पर मौजूद होता है.

  • -m: रिपॉज़िटरी में मौजूद कोई मेनिफ़ेस्ट फ़ाइल चुनें. अगर मेनिफ़ेस्ट का कोई नाम नहीं चुना गया है, तो डिफ़ॉल्ट रूप से default.xml चुना जाता है.

  • -b: किसी बदलाव के बारे में बताएं. इसका मतलब है कि किसी खास manifest-branch के बारे में बताएं.

सिंक करें

repo sync [project-list]

यह आपके लोकल एनवायरमेंट में, नए बदलावों को डाउनलोड करता है और काम करने वाली फ़ाइलों को अपडेट करता है. इससे, सभी Git रिपॉज़िटरी में 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 चलाएं.

अपलोड करें

repo upload [project-list]

यह कुकी, समीक्षा सर्वर पर बदलाव अपलोड करती है. Repo, चुने गए प्रोजेक्ट के लिए लोकल ब्रांच की तुलना उन रिमोट ब्रांच से करता है जिन्हें Repo सिंक करने के दौरान अपडेट किया गया था. Repo आपसे ऐसी एक या उससे ज़्यादा शाखाएं चुनने के लिए कहता है जिन्हें समीक्षा के लिए अपलोड नहीं किया गया है.

इसके बाद, चुनी गई सभी शाखाओं पर किए गए कमिट को HTTPS कनेक्शन के ज़रिए Gerrit पर ट्रांसमिट किया जाता है. अपलोड करने की अनुमति देने के लिए, आपको एचटीटीपीएस पासवर्ड कॉन्फ़िगर करना होगा. एचटीटीपीएस पर इस्तेमाल करने के लिए, नया उपयोगकर्ता नाम/पासवर्ड जनरेट करने के लिए, पासवर्ड जनरेट करने वाले टूल पर जाएं.

जब Gerrit को सर्वर पर ऑब्जेक्ट डेटा मिलता है, तो वह हर कमिट को एक बदलाव में बदल देता है, ताकि समीक्षक किसी खास कमिट पर टिप्पणी कर सकें. कई चेकपॉइंट कमिट को एक ही कमिट में मिलाने के लिए, अपलोड करने से पहले git rebase -i का इस्तेमाल करें.

अगर repo upload को बिना किसी तर्क के चलाया जाता है, तो यह अपलोड किए जाने वाले बदलावों के लिए सभी प्रोजेक्ट खोजता है.

अपलोड किए गए बदलावों में बदलाव करने के लिए, git rebase -i या git commit --amend जैसे टूल का इस्तेमाल करके, अपनी लोकल कमिट अपडेट करें. बदलाव करने के बाद:

  • पुष्टि करें कि अपडेट की गई ब्रांच, फ़िलहाल चेक आउट की गई ब्रांच है.
  • मिलान करने की सेटिंग में बदलाव करने वाले एडिटर को खोलने के लिए, repo upload --replace PROJECT का इस्तेमाल करें.
  • सीरीज़ में मौजूद हर कमिट के लिए, ब्रैकेट में Gerrit का बदलाव आईडी डालें:

    # Replacing from branch foo
    [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup 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.
    

अपलोड पूरा होने के बाद, बदलावों में एक और पैच सेट होता है.

अगर आपको सिर्फ़ मौजूदा चेक आउट की गई Git ब्रांच अपलोड करनी है, तो --current-branch फ़्लैग (या छोटे रूप में --cbr) का इस्तेमाल करें.

मिलते-जुलते बदलावों के लिए, सभी सीएल को एक ही विषय में रखना फ़ायदेमंद होता है. --topic=TOPIC का इस्तेमाल करके अपलोड करते समय, विषय का नाम जोड़ा जा सकता है. इसके अलावा, -t पास करके, विषय का नाम स्थानीय शाखा के नाम के जैसा सेट किया जा सकता है.

diff

repo diff [project-list]

git diff का इस्तेमाल करके, कमिट और वर्किंग ट्री के बीच के बदलावों को दिखाता है.

डाउनलोड करें

repo download target change

यह समीक्षा प्रणाली से, तय किए गए बदलाव को डाउनलोड करता है और उसे आपके प्रोजेक्ट की लोकल वर्किंग डायरेक्ट्री में उपलब्ध कराता है.

उदाहरण के लिए, platform/build डायरेक्ट्री में change 23823 को डाउनलोड करने के लिए:

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, मेनिफ़ेस्ट में मौजूद संशोधन का नाम है. इसे लोकल ट्रैकिंग ब्रांच में अनुवादित किया गया है. अगर आपको स्थानीय तौर पर एक्ज़ीक्यूट की गई Git कमांड को मेनिफ़ेस्ट का वर्शन पास करना है, तो इस वैरिएबल का इस्तेमाल करें.
  • REPO_RREV, मेनिफ़ेस्ट में मौजूद संशोधन का नाम है. यह मेनिफ़ेस्ट में लिखे गए नाम से पूरी तरह मेल खाना चाहिए.

विकल्प:

  • -c: निर्देश और उन्हें पूरा करने के लिए तर्क. कमांड का आकलन /bin/sh के ज़रिए किया जाता है. इसके बाद, किसी भी आर्ग्युमेंट को शेल पोज़िशनल पैरामीटर के तौर पर पास किया जाता है.
  • -p: इस विकल्प का इस्तेमाल करने पर, तय की गई कमांड का आउटपुट दिखाने से पहले प्रोजेक्ट के हेडर दिखते हैं. इसके लिए, पाइप को कमांड के stdin, stdout, और sterr स्ट्रीम से बाइंड किया जाता है. साथ ही, सभी आउटपुट को एक ऐसी स्ट्रीम में पाइप किया जाता है जो एक ही पेंजर सेशन में दिखती है.
  • -v: इस विकल्प का इस्तेमाल करके, उन मैसेज को दिखाया जाता है जिन्हें कमांड, stderr में लिखती है.

प्रून

repo prune [project-list]

पहले से मर्ज किए गए विषयों को हटाता है.

शुरू करें

repo start branch-name [project-list]

यह डेवलपमेंट के लिए नई ब्रांच शुरू करता है. यह ब्रांच, मेनिफ़ेस्ट में दिए गए वर्शन से शुरू होती है.

BRANCH_NAME आर्ग्युमेंट में, प्रोजेक्ट में किए जा रहे बदलाव के बारे में कम शब्दों में जानकारी दी जाती है. अगर आपको नहीं पता, तो default नाम का इस्तेमाल करें.

project-list आर्ग्युमेंट से यह तय होता है कि इस विषय की ब्रांच में कौनसे प्रोजेक्ट शामिल होंगे.

स्थिति

repo status [project-list]

यह कमांड, वर्किंग ट्री की तुलना, स्टेजिंग एरिया (इंडेक्स) और इस ब्रांच पर किए गए सबसे नए कमिट (HEAD) से करती है. यह तुलना, तय किए गए हर प्रोजेक्ट के लिए की जाती है. यह उन सभी फ़ाइलों के लिए खास जानकारी वाली लाइन दिखाता है जिनमें इन तीन स्थितियों के बीच अंतर है.

सिर्फ़ मौजूदा ब्रांच का स्टेटस देखने के लिए, repo status . चलाएं. स्टेटस की जानकारी, प्रोजेक्ट के हिसाब से दी गई है. प्रोजेक्ट में मौजूद हर फ़ाइल के लिए, दो अक्षरों वाला कोड इस्तेमाल किया जाता है.

पहले कॉलम में, कैपिटल लेटर से पता चलता है कि स्टेजिंग एरिया, आखिरी बार कमिट की गई स्थिति से कितना अलग है.

पत्र मतलब ब्यौरा
- कोई बदलाव नहीं HEAD और इंडेक्स में एक जैसा होना चाहिए
A जोड़ा गया HEAD में मौजूद नहीं है, इंडेक्स में मौजूद है
M बदला गया HEAD में, इंडेक्स में बदलाव किया गया
D मिटाया गया HEAD में मौजूद है, इंडेक्स में नहीं है
R नाम बदला गया HEAD में मौजूद नहीं है, इंडेक्स में पाथ बदल गया है
C कॉपी किया गया HEAD में नहीं है, इंडेक्स में मौजूद किसी दूसरे से कॉपी किया गया है
T मोड बदला गया HEAD और इंडेक्स में एक जैसा कॉन्टेंट है, मोड बदल गया है
U अनमर्ज किया गया HEAD और इंडेक्स के बीच टकराव; समाधान ज़रूरी है

दूसरे कॉलम में, छोटे अक्षरों से यह पता चलता है कि वर्किंग डायरेक्ट्री, इंडेक्स से किस तरह अलग है.

पत्र मतलब ब्यौरा
- नया/कोई जानकारी नहीं है इंडेक्स में नहीं है, वर्क ट्री में है
m बदला गया इंडेक्स में, वर्क ट्री में बदलाव किया गया
d मिटाया गया इंडेक्स में है, वर्क ट्री में नहीं

रिपॉज़िटरी से जुड़ी गड़बड़ियों को ठीक करना

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

repo: error: no branches ready for upload गड़बड़ी तब दिखती है, जब सेशन की शुरुआत में repo start कमांड नहीं चलाई गई हो. वापस लाने के लिए, कमिट आईडी देखें. इसके बाद, नई ब्रांच शुरू करें और उसे मर्ज करें.