repo教程以及repo下載android原始碼以及遇到的問題
根據android官網,下載並安裝repo:
To install Repo:
-
Make sure you have a bin/ directory in your home directory and that it is included in your path:
$ mkdir ~/bin $ PATH=~/bin:$PATH
-
Download the Repo tool and ensure that it is executable:
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/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