1. 程式人生 > >repo教程以及repo下載android原始碼以及遇到的問題

repo教程以及repo下載android原始碼以及遇到的問題

根據android官網,下載並安裝repo:

To install Repo:

  1. Make sure you have a bin/ directory in your home directory and that it is included in your path:

    $ mkdir ~/bin
    $ PATH=~/bin:$PATH
    
  2. Download the Repo tool and ensure that it is executable:

    $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo

用repo下載android原始碼遇到如下問題:

Fetching project:100%(169/169),done之後就卡住不動了,ctrl+c也無法中斷,到android官網查到如下:

More rarely, Linux clients experience connectivity issues, getting stuck in the middle of downloads (typically during "Receiving objects"). It has been reported that tweaking the settings of the TCP/IP stack and using non-parallel commands can improve the situation. You need root access to modify the TCP setting:

$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1

按提示輸入上述兩條命令解決問題。

恢復某個版本code的命令,採用-m引數:

repo init -u ssh://192.168.1.167/pub/0/android_4.2.2/platform/manifest.git  -m version2_release.xml -b branch_abc

其中-m引數後面所跟檔名為 .repo/manifests/目錄下的某個xml檔案。


repo教程:

涉及Android原始碼的工作需要用到的Git和Repo工具。多數情況下我們可以用Git工具代替Repo,或者兩者混用組合成更復雜的命令。而Repo工具可以使Android的網路操作更加簡潔。
     Git是一個開源版本管理系統,旨在處理各種知識庫釋出的大型專案。一般來說,我們可以使用Git進行本地操作,比如本地分支化、提交、對比和編輯。Android專案中一個挑戰是如何支援外部的群體(愛好者社群以及大型OEM廠商)。如果想讓元件可替代、延長生命週期,我們必須選擇一個釋出式版本管理系統,所有我們選擇Git工具。
     Repo是基於Git工具的知識庫管理系統工具,該工具可以統一管理Git知識庫並提交原始碼到版本管理系統,使得Android專案的開發流程自動化。Repo並不意味著替代Git工具,它僅使得工作更加簡單。Repo命令是Python指令碼,可以放到任何路徑下。涉及到網路操作時可以使用該工具,比如使用單個Repo命令可以下載多個知識庫到本地。
     Gerrit是給予web的程式碼review系統,集中支援了Git眾多的應用。該系統允許授權使用者提交程式碼更改,通過review後自動merge到版本管理系統。Gerrit支援差異展現和線上評論,使review比較簡單。
一、版本管理基本流程


     與知識庫互動的基本流程如下:
     1、建立新的分支——repo start
     2、編輯程式碼檔案
     3、stage檔案更改——git add
     4、提交更改——git commit
     5、提交更改到review伺服器——repo upload

                                           
二、任務處理
     下面詳細介紹瞭如何使用Repo和Git命令。

     1、同步本地客戶端


      同步所有的工程檔案——repo sync,下載最新本地工作檔案,更新成功,這本地檔案和repository 中的程式碼是一樣的。 可以指定需要更新的project , 如果不指定任何引數,會同步整個所有的專案。如果是第一次執行 repo sync , 則這個命令相當於 git clone ,會把 repository 中的所有內容都拷貝到本地。 如果不是第一次執行 repo sync , 則相當於 git remote update ;  git rebase origin/branch .  repo sync 會更新 .repo 下面的檔案。 如果在merge 的過程中出現衝突, 這需要手動執行  git  rebase --continue


      同步特定的工程檔案——repo sync PROJECT0 PROJECT1 PROJECT2 ...


     2、建立分支
     每當開始編輯檔案比如開始修改bug和新增新的功能,需要在本地建立特定的分支。分支並不是原始檔案的拷貝,它作為特定提交的標示,該標示建立本地分支並在分支間進行輕量級切換,分支可以隔絕一個方面的更改。
     建立分支——repo start BRANCH_NAME
     驗證新分支的有效性——repo status


    3、分支使用
     分配分支到特定工程——repo start BRANCH_NAME PROJECT
     本地環境中切換分支——git checkout BRANCH_NAME
     列出所有分支——git branch or repo branches


   4、staging檔案
     預設情況下,git工具提示但並不跟蹤工程的更改,為了通知git儲存程式碼的變化,我們必須commit程式碼,即“staging”。
    stage檔案更改——git add
    該命令可以接受任何檔案和工程目錄,git新增檔案到git知識庫,並且stage檔案更改、刪除的記錄。


   5、瀏覽客戶端狀態
    展示檔案狀態——repo status
    展示未提交的檔案編輯——repo diff


   6、提交更改
    git中commit是版本管理的基本單元,包含了工程的目錄結構和檔案內容。
    建立commit——git commit
    執行該命令後editor中彈出commit提示資訊,最好能夠提供有益的幫助資訊。如果沒有新增log資訊,該次commit提交會被遺棄。


   7、提交更改到Gerrit
    upload之前更新最新的版本——repo sync
    接著提交程式碼——repo upload
    之後呈現我們提交的更改,並提示我們選擇分支。


   8、處理程式碼衝突
    提交程式碼時如果遇到衝突,需要執行以下操作:進入相關的工程目錄,針對衝突的檔案執行git add和git commit命令,恢復更改。如下:
     git add .
     git commit
     git rebase --continue
    恢復更改後再次重複整個更新:
     repo sync PROJECT0 PROJECT1 ... PROJECTN
    如果本地又對剛剛提交的程式碼進行了修改,提交時可以直接覆蓋上次的提交,執行如下命令:
    git add files
    git commit  --amend
    repo upload


   9、清除客戶端檔案
    merge程式碼到Gerrit之後,更新本地的工作目錄:
    repo sync
   安全清除陳舊的分支執行以下命令:
    repo prune
   想恢復程式碼到以前的分支,可以執行以下命令:
    git log
    git reset hard


  10、刪除客戶端程式碼
   由於程式碼所有的程式碼資訊儲存在本地,我們僅需要刪除目錄即可完成:
    rm -rf WORKING_DIRECTORY
   刪除原生代碼後將會永久的刪除所有提交的更改。


三、Git和Repo流程表

流程命令表

原文參考:http://source.android.com/source/version-control.html