रेपो कमांड के बारे में जानकारी

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

रेपो का इस्तेमाल इस तरह से होता है:

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]

मौजूदा डायरेक्ट्री में रेपो इंस्टॉल करें. यह निर्देश, रेपो सोर्स कोड और स्टैंडर्ड 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: अन्य प्रोजेक्ट को सिंक करें, भले ही कोई प्रोजेक्ट सिंक न हो रहा हो.
  • 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 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).

फ़र्क़

repo diff [project-list]

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

डाउनलोड करें

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

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

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