स्रोत नियंत्रण वर्कफ़्लो

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

प्रवाह

Android विकास में निम्नलिखित बुनियादी कार्यप्रवाह शामिल हैं:

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

कार्य

एंड्रॉइड कोड रिपॉजिटरी में गिट और रेपो के साथ काम करने में निम्नलिखित सामान्य कार्य करना शामिल है।

आज्ञा विवरण
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 sync

चयनित परियोजनाओं के लिए फ़ाइलों को सिंक्रनाइज़ करने के लिए:

repo sync PROJECT0 PROJECT1 ... PROJECTN

विषय शाखाएँ बनाना

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

रेपो का उपयोग करके विषय शाखा शुरू करने के लिए, प्रोजेक्ट पर नेविगेट करें और चलाएं:

repo start BRANCH_NAME .

अनुगामी अवधि ( . ) वर्तमान कार्यशील निर्देशिका में परियोजना का प्रतिनिधित्व करती है।

यह सत्यापित करने के लिए कि नई शाखा बनाई गई थी:

repo status .

विषय शाखाओं का उपयोग करना

किसी विशिष्ट परियोजना को शाखा आवंटित करने के लिए:

repo start BRANCH_NAME PROJECT_NAME

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

अपने स्थानीय कार्य परिवेश में किसी अन्य शाखा में स्विच करने के लिए:

git checkout BRANCH_NAME

मौजूदा शाखाओं की सूची देखने के लिए:

git branch

या

repo branches

दोनों आदेश मौजूदा शाखाओं की सूची को तारक (*) से पहले वर्तमान शाखा के नाम से लौटाते हैं।

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

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

चरण परिवर्तन के लिए:

git add

यह कमांड प्रोजेक्ट डायरेक्टरी के भीतर फाइलों या निर्देशिकाओं के लिए तर्क स्वीकार करता है। नाम के बावजूद, git add केवल Git रिपॉजिटरी में फ़ाइलें नहीं जोड़ता है; इसका उपयोग फ़ाइल संशोधनों और विलोपन को चरणबद्ध करने के लिए भी किया जा सकता है।

ग्राहक की स्थिति देखना

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

repo status

अप्रतिबद्ध संपादन देखने के लिए (स्थानीय संपादन जिन्हें प्रतिबद्ध के लिए चिह्नित नहीं किया गया है):

repo diff

प्रतिबद्ध संपादन देखने के लिए (स्थित संपादन जो प्रतिबद्ध के लिए चिह्नित हैं), सुनिश्चित करें कि आप प्रोजेक्ट निर्देशिका में हैं, फिर cached तर्क के साथ git diff चलाएं:

cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached

परिवर्तन करना

एक प्रतिबद्धता गिट में संशोधन नियंत्रण की मूल इकाई है और इसमें संपूर्ण परियोजना के लिए निर्देशिका संरचना और फ़ाइल सामग्री का एक स्नैपशॉट होता है। Git में कमिट बनाने के लिए इस कमांड का उपयोग करें:

git commit

जब एक प्रतिबद्ध संदेश के लिए कहा जाए, तो AOSP को सबमिट किए गए परिवर्तनों के लिए एक संक्षिप्त (लेकिन सहायक) संदेश प्रदान करें। यदि आप एक प्रतिबद्ध संदेश नहीं जोड़ते हैं, तो प्रतिबद्धता विफल हो जाती है।

Gerrit . में परिवर्तन अपलोड कर रहा है

नवीनतम संशोधन में अपडेट करें, फिर परिवर्तन अपलोड करें:

repo sync
repo upload

ये आदेश आपके द्वारा किए गए परिवर्तनों की एक सूची लौटाते हैं और आपको समीक्षा सर्वर पर अपलोड करने के लिए शाखाओं का चयन करने के लिए संकेत देते हैं। यदि केवल एक शाखा है, तो आप एक साधारण y/n संकेत देखते हैं।

समन्वयन विरोधों का समाधान

यदि repo sync कमांड सिंक विरोध देता है:

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

ग्राहकों की सफाई

गेरिट में परिवर्तनों को मर्ज करने के बाद, अपनी स्थानीय कार्यशील निर्देशिका को अपडेट करें, फिर पुरानी विषय शाखाओं को सुरक्षित रूप से हटाने के लिए repo prune का उपयोग करें:

repo sync
repo prune

ग्राहकों को हटाना

चूंकि सभी राज्य की जानकारी आपके क्लाइंट में संग्रहीत है, आपको केवल अपने फाइल सिस्टम से निर्देशिका को हटाने की जरूरत है:

rm -rf WORKING_DIRECTORY

क्लाइंट को हटाने से वे सभी परिवर्तन स्थायी रूप से हट जाते हैं जिन्हें आपने समीक्षा के लिए अपलोड नहीं किया है।