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

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

फ़्लो

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

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