應(yīng)用 Android 代碼時,你需要同時使用 Git 和 Repo,在大多數(shù)情況下,你可以使用 Git 而不是 Repo,或是混合使用 Git 和 Repo 形成的復(fù)雜命令。然而,把 Repo 使用于基本跨網(wǎng)絡(luò)(across-network)的操作時,將會使你的工作更加簡單。
Git 是一個開源的版本控制系統(tǒng),設(shè)計來處理分布在多個存儲庫的大項目。在 Android 背景中,我們可以使用 Git 進行本地操作,如本地分支,提交,差異,和編輯。其中我們在建立 Android 項目所面臨的其中一個挑戰(zhàn)就是如何最好地支持外界社區(qū)——從愛好社區(qū)到大型 OMEs 構(gòu)建大眾消費設(shè)備。我們希望組件能夠被替換,我們還想要有趣的組件去發(fā)展他們在 Android 以外的生活。我們首先選擇一個分布式的版本控制系統(tǒng),然后進一步將其縮小到 Git。
Repo 是我們建立在 Git 頂部的一個存儲庫管理工具。Repo 在必要時可以統(tǒng)一許多個 Git 倉庫,上傳到我們的 版本控制系統(tǒng),并且自動化 Android 部分開發(fā)工作流程。Repo 并不意味著取代 Git,只是幫助更容易地在 Android 環(huán)境中使用 Git。Repo 命令是一個可執(zhí)行的 Python 腳本,你可以把它放在你的任何路徑上。在使用 Android 源文件工作時,你將把 Repo 使用于跨網(wǎng)絡(luò)操作。例如,使用一個單一的 Repo 命令,你就可以從多個存儲庫下載文件到你的本地目錄下。
Gerrit 是一個基于 Web 的代碼審查系統(tǒng),使用的是 Git。Gerrit 鼓勵所有授權(quán)用戶更多的集中使用 Git 來提交變化,如果他們發(fā)布代碼審查,Gerrit 將可以進行自動合并。此外,Gerrit 通過瀏覽器顯示每一步變化使審查變得更加容易,并且支持內(nèi)聯(lián)注釋。
與存儲庫交互的基本模式如下:
repo start 開始一個新的主題分支。git add 暫存更改。git commit 提交更改。repo upload 上傳更改到審查服務(wù)器。 http://wiki.jikexueyuan.com/project/android-source/images/developing1.png" alt="images" />
下面的任務(wù)列表總結(jié)了如何進行普通的 Repo 和 Git 任務(wù)操作。關(guān)于使用 Repo 下載資源的信息,請參閱 下載資源 和 使用 Repo。
同步所有可用項目的文件:
$ repo sync
同步已選擇項目的文件:
$ repo sync PROJECT0 PROJECT1 PROJECT2 ...
當(dāng)你開始進行一個改變時,在你的本地工作環(huán)境上新建一個主題分支,例如當(dāng)你開始解決 bug 或開發(fā)新功能的時候。主題分支不是原始文件的復(fù)制;它是一個特定的提交的指向。這使得創(chuàng)建的本地分支能在它們之間進行輕微操作的切換。通過使用分支,你可以把當(dāng)前的工作與其他工作分離。有關(guān)使用主題分支的一篇有趣的文章,請參閱 分離特性分支。
使用 Repo 開始一個主題分支,導(dǎo)航到該項目進行修改和發(fā)布:
$ repo start BRANCH_NAME .
請注意,這個期間是在當(dāng)前工作目錄下。驗證是否已創(chuàng)建新的分支:
$ repo status .
要指定分支到一個特定的項目:
$ repo start BRANCH_NAME PROJECT_NAME
查看 android.googlesource.com 所有項目的列表。此外,如果你已經(jīng)導(dǎo)航到特定項目的目錄,那么你可以簡單地傳遞一個時期代表當(dāng)前項目。
要切換到您在本地工作環(huán)境中創(chuàng)造的另一個分支:
$ git checkout BRANCH_NAME
查看現(xiàn)有分支的列表:
$ git branch
或
$ repo branches
當(dāng)前分支的名字將被標星號表示優(yōu)先。
注意:一個 bug 可能會導(dǎo)致
repo sync重置本地的分支。如果你運行repo sync之后,git branch顯示 *(沒有分支),那就再次運行git checkout。
默認情況下,Git 通知但沒有跟蹤你在一個項目中所做的更改。為了讓 Git 保存你的更改,你必須將它們標記在一個 commit 中。這也稱之為 “staging(暫存)”。
你可以在運行下面命令來暫存更改
git add
它接受作為參數(shù)的項目目錄中的任何文件或目錄。盡管 git add 并不如名字表示的這樣簡單地將文件添加到 Git 倉庫,但是它也是可以用來暫存文件的修改和刪除的。
列出文件的狀態(tài):
$ repo status
查看未提交的編輯:
$ repo diff
repo diff 命令能夠顯示你所做的每一個本地編輯,除了已經(jīng)進入提交的,如果你正準備現(xiàn)在提交。如果你現(xiàn)在提交,那么你將進入提交并且可以看到每一個編輯狀態(tài),你需要一個 Git 命令,即 git diff 。運行它之前,首先確定你是在當(dāng)前項目的目錄下:
$ cd ~/WORKING_DIRECTORY/PROJECT
$ git diff ——cached
在 Git 中,一個 commit 是版本控制的一個基本單位,是組成目錄結(jié)構(gòu)的一個快照(snapshot),也是組成整個項目的文件內(nèi)容。在 Git 中創(chuàng)建一個 commit 很簡單,只需要輸入如下代碼:
git commit
你將在你最喜歡的編輯器中收到一條 commit 消息的提示;請為你提交到 AOSP 的更改都提供一條有效信息。如果你不添加記錄信息,你的 commit 將會被中止。
上傳之前,更新到最新版本:
repo sync
然后運行
repo upload
這將會把你已經(jīng)提交的更改列表出來,并且提示你選擇分支上傳到審查服務(wù)器。如果只有一個分支,那么你會看到一個簡單的 y/n 提示。
如果一個 repo sync 顯示同步?jīng)_突:
在相關(guān)的項目目錄中更改,為上述文件運行 git add 和 git commit,然后 “rebase” 這個更改。例如:
$ git add .
$ git commit
$ git rebase --continue
當(dāng) rebase 完成時再一次開始完整的同步:
$ repo sync PROJECT0 PROJECT1 ... PROJECTN
更改被合并到 Gerrit 之后更新你的本地工作目錄:
$ repo sync
安全的移除已過時的主題分支:
$ repo prune
因為所有暫存文件都存儲在你的客戶端,你只需要從你的文件系統(tǒng)直接刪除目錄:
$ rm -rf WORKING_DIRECTORY
刪除客戶端將會永久地刪除你還沒有上傳審查的更改。
http://wiki.jikexueyuan.com/project/android-source/images/developing2.png" alt="images" />