本地Android代碼庫的搭建

在android系統開發的過程中,source code是由git來做代碼管理的。在android source code中有很多的git倉庫,如果單個去管理的話會比較麻煩。這就引入了repo。repo是用python寫的一個腳本,用來封裝git的操作。
下面就以android源碼爲例,介紹repo+git的搭建。

  1. repo工具的安裝
    對於普通用戶安裝repo的方法如下
    1.新建~/bin,並且在系統變量中添加這個bin路徑
    mkdir ~/bin
    export PATH=~/bin:$PATH
    2.下載repo腳本
    curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo

  2. manifest倉庫的建立
    repo進行代碼管理是通過一個配置文件(xml文件)來進行的。默認情況這個配置文件是default.xml。位置爲:.repo/manifests
    假設服務器地址爲:10.8.5.239
    賬戶:git
    1.首先在服務器端建立一個空的git倉庫,用來存儲manifest。
    git init --bare manifest.git
    2.從客戶端clone manifest倉庫
    git clone [email protected]:/home/git/CDR8010/manifest/manifest.git
    3.添加xml配置文件
    xml配置文件格式如下:

    	<?xml version="1.0" encoding="UTF-8"?> 
    	<manifest>
    		<remote fetch="../" name="master"/>
    		<default remote="master" revision="master"/>
    		<project name="CodeAurora89xx/platform/vendor/askey/sdk_addonde" path="LA.UM.7.6.2/LINUX/android/vendor/askey/sdk_addonde" />
    	< /manifest>
    

    remote fetch元素是用來指定代碼git倉庫所在的位置。這個位置是相對位置,相對manifest.git倉庫的位置。
    default remote=代表是默認遠程代碼的分支,revision代表的reposync時要下載的分支名稱
    project name=代表代碼在服務器中存放的位置
    path=代表代碼從服務器中下載下來之後存放的位置

  3. 服務器端git倉庫的建立
    由於android代碼是從google直接下載下來的。google默認也是通過git來管理android代碼。所以在.repo/manifest目錄下面就存在一個default.xml配置文件。那麼就根據這個xml文件來初始化自己的git倉庫。
    由於android中的倉庫很多,所以寫一個腳本來初始化git倉庫

    #!/usr/bin/python3
    import os
    import sys
    if len(sys.argv) == 1:
       print('錯誤!請傳入 xml 文件')
    elif len(sys.argv) > 2:
       print('錯誤!傳入參數太多')
    else:
       print('傳入的文件是 %s' % sys.argv[1])
       
    with open(sys.argv[1], 'r') as fin:
       while True:
       	linestr = fin.readline()
       	if linestr == '':
       		break
       	if (('name=' in linestr) or ('name =' in linestr)) and (('project' in linestr) or ('path' in linestr)):   #本行內容含有name信息
       		charistr1 = 'name="'
       		charistr2 = '"'
       		gitprojstr = linestr[linestr.index(charistr1)+len(charistr1) : linestr.index(charistr1)+len(charistr1)+ linestr[linestr.index(charistr1)+len(charistr1):].index(charistr2)]
       		cmd = 'git init --bare %s.git' % gitprojstr
       		os.system(cmd) 
       		print(cmd)
    

    這個腳本就是讀取default.xml文件中的project name屬性來創建倉庫。
    這樣服務器端的源碼倉庫就已經創建完成。

  4. Android 源碼中添加自己的git配置
    步驟3中已經將倉庫建立完成,下面就需要將本地代碼push到服務器端。但是源碼中是從google下載下來的。所以此時代碼中連接的代碼庫是google的。要想將本地的代碼push到自己的服務器上,就需要將這些庫添加自己服務器對應的庫。幸好repo提供了遍歷庫的功能。
    在源碼目錄下面執行如下命令:
    repo forall -c ‘git remote add CDR8010 [email protected]:/home/git/CDR8010/$REPO_PROJECT.git’
    其中REPO_PROJECT對應的是project name。
    這條命令執行完成之後,就在每個git庫中添加了自己的git倉庫。

  5. 推送本地代碼到服務器端git倉庫
    到目前爲止,已經將代碼配置完成。接下來的工作就是將當前的代碼推送到自己的服務器上。
    repo start master --all
    repo forall -c ‘git push -u CDR8010 master’
    上面第一條命令是將各個git倉庫建立一個master本地分支
    第二條命令將會進入到每個git庫,之後將本地master代碼push到Skysoft分支對應的遠程git倉庫中
    至此repo+git的環境就已經搭建完成。並且將代碼推送到遠程服務器中了。

  6. 從服務器repo download代碼
    將代碼保存在服務器中的目的就是讓開發人員能夠從服務器中下載code。
    下載code方法爲:
    repo init -u [email protected]:/home/git/CDR8010/manifest/manifest.git
    上述命令就是將步驟2中的manifest同步下來,畢竟裏面存放着git倉庫的信息。
    接下來就是同步git倉庫中的代碼:
    repo sync
    下載完成之後就能編譯啦。

補充:
由於要從服務器端下載代碼,所以需要將本地服務器的public key添加到git server的authorized_keys中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章