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]
मौजूदा डायरेक्ट्री में Repo इंस्टॉल करता है. यह निर्देश, Repo सोर्स कोड और स्टैंडर्ड Android मेनिफ़ेस्ट फ़ाइलों के लिए, Git रिपॉज़िटरी वाली .repo/
Directory बनाता है.
विकल्प:
-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
).
मिलते-जुलते बदलावों के लिए, सभी सीएल को एक ही विषय में रखना फ़ायदेमंद होता है. --topic=TOPIC
का इस्तेमाल करके अपलोड करते समय, किसी विषय का नाम जोड़ा जा सकता है. इसके अलावा, विषय का नाम स्थानीय शाखा के नाम के मुताबिक सेट करने के लिए, सिर्फ़ -t
पास करें.
diff
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
नहीं चलाया गया था. इसे वापस पाने के लिए, कमिट आईडी देखें, नई शाखा शुरू करें, और फिर उसे मर्ज करें.