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

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 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: तेज़ी से काम पूरा करने के लिए, सिंक को कई थ्रेड में बांटा जा सकता है. पक्का करें कि आपके मशीन पर ज़्यादा काम न हो - कुछ सीपीयू को दूसरे कामों के लिए रिज़र्व रहने दें. उपलब्ध सीपीयू (CPU) की संख्या देखने के लिए, पहले nproc --all को चलाएं.
  • -q: स्थिति बताने वाले मैसेज को दबाकर बिना किसी रुकावट के चलाएं.
  • -s: मौजूदा मेनिफ़ेस्ट में manifest-server एलिमेंट के ज़रिए बताए गए अच्छे बिल्ड के साथ सिंक करें.

ज़्यादा विकल्पों के लिए, repo help sync चलाएं.

अपलोड करें

repo upload [project-list]

समीक्षा सर्वर पर बदलाव अपलोड करता है. बताए गए प्रोजेक्ट के लिए, 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

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

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

repo download platform/build 23823

repo sync को चलाने पर, repo download से हासिल किए गए सभी कमिट हट जाते हैं. इसके अलावा, git checkout m/main का इस्तेमाल करके रिमोट ब्रांच को भी देखा जा सकता है.

सभी के लिए

repo forall [project-list] -c command

हर प्रोजेक्ट में दिए गए शेल कमांड को एक्ज़ीक्यूट करता है. ये अतिरिक्त एनवायरमेंट वैरिएबल, repo forall उपलब्ध कराता है:

  • REPO_PROJECT को प्रोजेक्ट के खास नाम पर सेट किया गया है.
  • REPO_PATH, क्लाइंट के रूट के मुताबिक पाथ है.
  • मेनिफ़ेस्ट से रिमोट सिस्टम का नाम REPO_REMOTE है.
  • REPO_LREV, मेनिफ़ेस्ट में किए गए बदलाव का नाम है. इसे लोकल ट्रैकिंग ब्रांच में बदला जाता है. अगर आपको मेनिफ़ेस्ट में बदलाव को स्थानीय रूप से चलाए गए Git कमांड में पास करना है, तो इस वैरिएबल का इस्तेमाल करें.
  • REPO_RREV, मेनिफ़ेस्ट में किए गए बदलाव का नाम है, जैसा कि मेनिफ़ेस्ट में लिखा गया है.

विकल्प:

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

प्रुन

repo prune [project-list]

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

शुरू करना

repo start branch-name [project-list]

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

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

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

status

repo status [project-list]

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

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

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

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