सोर्स कंट्रोल वर्कफ़्लो

Android कोड के साथ काम करने के लिए, Git की ज़रूरत होती है. यह ओपन-सोर्स वर्शन कंट्रोल सिस्टम है. साथ ही, Repo की भी ज़रूरत होती है. यह Google का बनाया हुआ रिपॉज़िटरी मैनेजमेंट टूल है, जो Git पर काम करता है. Repo और Git के बीच के संबंध के बारे में जानने के लिए, सोर्स कंट्रोल टूल लेख पढ़ें. इसमें हर टूल के बारे में ज़्यादा जानकारी देने वाले दस्तावेज़ों के लिंक भी दिए गए हैं.

Flow

Android डेवलपमेंट में, यह बुनियादी वर्कफ़्लो शामिल होता है:

  1. repo start का इस्तेमाल करके, कोई नई विषय शाखा शुरू करें.
  2. फ़ाइलों में बदलाव करें.
  3. git add का इस्तेमाल करके स्टेज में बदलाव करना.
  4. git commit का इस्तेमाल करके बदलावों को लागू करें.
  5. repo upload का इस्तेमाल करके, समीक्षा सर्वर पर बदलाव अपलोड करें.

Tasks

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

निर्देश ब्यौरा
repo init यह कुकी, नए क्लाइंट को शुरू करती है.
repo sync यह कुकी, क्लाइंट को रिपॉज़िटरी के साथ सिंक करती है.
repo start इससे नई ब्रांच शुरू होती है.
repo status मौजूदा ब्रांच का स्टेटस दिखाता है.
repo upload यह कुकी, समीक्षा सर्वर पर बदलाव अपलोड करती है.
git add फ़ाइलों को स्टेज करता है.
git commit स्टेज की गई फ़ाइलों को कमिट करता है.
git branch मौजूदा ब्रांच दिखाता है.
git branch [branch] इससे नई टॉपिक ब्रांच बनती है.
git checkout [branch] HEAD को बताई गई ब्रांच पर स्विच करता है.
git merge [branch] [branch] को मौजूदा ब्रांच में मर्ज करता है.
git diff इससे स्टेज नहीं किए गए बदलावों का अंतर दिखता है.
git diff --cached इससे स्टेज किए गए बदलावों का अंतर दिखता है.
git log मौजूदा ब्रांच का इतिहास दिखाता है.
git log m/[codeline].. पुश नहीं की गई कमिट दिखाता है.

सोर्स को डाउनलोड करने के लिए Repo का इस्तेमाल करने के बारे में जानने के लिए, सोर्स डाउनलोड करना और Repo कमांड रेफ़रंस देखें.

क्लाइंट खातों को सिंक करना

सभी उपलब्ध प्रोजेक्ट के लिए फ़ाइलों को सिंक करने के लिए:

repo sync

चुने गए प्रोजेक्ट की फ़ाइलों को सिंक करने के लिए:

repo sync PROJECT0 PROJECT1 ... PROJECTN

विषय के हिसाब से ब्रांच बनाना

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

Repo का इस्तेमाल करके किसी विषय की ब्रांच शुरू करने के लिए, प्रोजेक्ट पर जाएं और यह कमांड चलाएं:

repo start BRANCH_NAME .

ट्रेलिंग पीरियड ( .) से, मौजूदा वर्किंग डायरेक्ट्री में मौजूद प्रोजेक्ट के बारे में पता चलता है.

यह पुष्टि करने के लिए कि नई ब्रांच बन गई है:

repo status .

विषय के हिसाब से ब्रांच का इस्तेमाल करना

किसी ब्रांच को किसी प्रोजेक्ट के लिए असाइन करने के लिए:

repo start BRANCH_NAME PROJECT_NAME

सभी प्रोजेक्ट की सूची के लिए, android.googlesource.com पर जाएं. अगर आपने पहले ही प्रोजेक्ट डायरेक्ट्री पर नेविगेट कर लिया है, तो मौजूदा प्रोजेक्ट को दिखाने के लिए, सिर्फ़ एक अवधि का इस्तेमाल करें.

अपने लोकल वर्क एनवायरमेंट में किसी दूसरी ब्रांच पर स्विच करने के लिए:

git checkout BRANCH_NAME

मौजूदा ब्रांच की सूची देखने के लिए:

git branch

या

repo branches

इन दोनों कमांड से, मौजूदा ब्रांच के नाम के साथ-साथ मौजूदा ब्रांच के नाम से पहले तारे के निशान (*) के साथ मौजूदा ब्रांच की सूची दिखती है.

स्टेजिंग फ़ाइलें

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

बदलावों को स्टेज करने के लिए:

git add

यह कमांड, प्रोजेक्ट डायरेक्ट्री में मौजूद फ़ाइलों या डायरेक्ट्री के लिए आर्ग्युमेंट स्वीकार करती है. नाम के बावजूद, git add सिर्फ़ Git रिपॉज़िटरी में फ़ाइलें नहीं जोड़ता है. इसका इस्तेमाल, फ़ाइलों में किए गए बदलावों को स्टेज करने और उन्हें मिटाने के लिए भी किया जा सकता है.

क्लाइंट खाते का स्टेटस देखना

फ़ाइलों की स्थिति की सूची बनाने के लिए:

repo status

ऐसे स्थानीय बदलाव देखने के लिए जिन्हें कमिट करने के लिए मार्क नहीं किया गया है:

repo diff

जिन बदलावों को लागू किया जा चुका है उन्हें देखने के लिए (ऐसे बदलाव जिन्हें लागू करने के लिए मार्क किया गया है), पक्का करें कि आप प्रोजेक्ट डायरेक्ट्री में हों. इसके बाद, cached आर्ग्युमेंट के साथ git diff चलाएं:

cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached

बदलावों को लागू करना

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

git commit

जब कमिट मैसेज के लिए कहा जाए, तब AOSP में सबमिट किए गए बदलावों के लिए छोटा (लेकिन काम का) मैसेज दें. कमिट मैसेज न जोड़ने पर, कमिट नहीं हो पाता.

लेख पढ़ें

Gerrit में बदलाव अपलोड किए जा रहे हैं

सबसे नए वर्शन पर अपडेट करें. इसके बाद, बदलाव अपलोड करें:

repo sync
repo upload

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

सिंक करने से जुड़ी समस्याओं को हल करना

अगर repo sync कमांड से सिंक करने से जुड़ी समस्याएं दिखती हैं, तो:

  1. उन फ़ाइलों को देखें जिन्हें मर्ज नहीं किया गया है (स्टेटस कोड = U).
  2. टकराव वाले क्षेत्रों में ज़रूरत के मुताबिक बदलाव करें.
  3. उस प्रोजेक्ट डायरेक्ट्री पर जाएं जिससे जुड़ी जानकारी आपको देखनी है. असर डालने वाली फ़ाइलों को जोड़ें और कमिट करें. इसके बाद, बदलावों को फिर से बेस करें:
    git add .
    git commit
    git rebase --continue
    
  4. रीबेस की प्रोसेस पूरी होने के बाद, सिंक की पूरी प्रोसेस फिर से शुरू करें:
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

क्लाइंट को हटाना

Gerrit में बदलावों को मर्ज करने के बाद, अपनी लोकल वर्किंग डायरेक्ट्री अपडेट करें. इसके बाद, पुरानी हो चुकी टॉपिक ब्रांच को सुरक्षित तरीके से हटाने के लिए, repo prune का इस्तेमाल करें:

repo sync
repo prune

क्लाइंट मिटाना

राज्य की सभी जानकारी आपके क्लाइंट में सेव होती है. इसलिए, आपको सिर्फ़ अपने फ़ाइल सिस्टम से डायरेक्ट्री मिटानी होगी:

rm -rf WORKING_DIRECTORY

क्लाइंट खाते को मिटाने से, वे सभी बदलाव हमेशा के लिए मिट जाते हैं जिन्हें आपने समीक्षा के लिए अपलोड नहीं किया है.