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

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

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

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

git checkout BRANCH_NAME

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

git branch

या

repo branches

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

फ़ाइलें स्टेज करना

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

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

git add

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

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

फ़ाइलों का स्टेटस देखने के लिए:

repo status

कमिट नहीं किए गए बदलाव देखने के लिए (लोकल बदलाव जिन्हें कमिट के लिए मार्क नहीं किया गया):

repo diff

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

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

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