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]

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

विकल्प:

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

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

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

Repo की बाकी सभी कमांड के लिए, मौजूदा वर्किंग डायरेक्ट्री, .repo/ की पैरंट डायरेक्ट्री या पैरंट डायरेक्ट्री की सबडायरेक्ट्री होनी चाहिए.

सिंक करें

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 आपसे उन एक या उससे ज़्यादा ब्रांच को चुनने के लिए कहता है जिन्हें समीक्षा के लिए अपलोड नहीं किया गया है.

इसके बाद, चुनी गई सभी शाखाओं पर किए गए कमिट को एचटीटीपीएस कनेक्शन के ज़रिए 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 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.
    

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

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

prune

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 बदला गया इंडेक्स में, वर्क ट्री में बदलाव किया गया
दिन मिटा दिया गया इंडेक्स में है, वर्क ट्री में नहीं

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

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

Git डेटा स्टोर करने की जगह का स्ट्रक्चर

Android के लिए, Git रिपॉज़िटरी (प्रोजेक्ट) नेस्ट नहीं की जाती हैं. हर प्रोजेक्ट, सोर्स ट्री में मौजूद किसी खास डायरेक्ट्री से जुड़ा होता है. साथ ही, उस डायरेक्ट्री में मौजूद सभी सबडायरेक्ट्री और फ़ाइलें, एक ही प्रोजेक्ट का हिस्सा होती हैं. Android डेवलपमेंट के लिए, Repo की git submodule सुविधा का इस्तेमाल न करें.