鍍金池/ 教程/ Android/ 開(kāi)發(fā)
下載源碼
根據設備構建
Git 資源
構建系統
Android 平臺 64 位構建指導
初始化編譯環(huán)境
Android 源代碼
品牌指南
已知的問(wèn)題
Repo 命令手冊
構建內核
Bug 的生命周期
代碼主線(xiàn)、分支和版本
使用 Eclipse
提交補丁
下載與構建
參與
項目角色
補丁的生命周期
提交 Bugs
關(guān)于代碼風(fēng)格的指導
開(kāi)發(fā)
代碼名稱(chēng),標簽和版本號

開(kāi)發(fā)

應用 Android 代碼時(shí),你需要同時(shí)使用 Git 和 Repo,在大多數情況下,你可以使用 Git 而不是 Repo,或是混合使用 Git 和 Repo 形成的復雜命令。然而,把 Repo 使用于基本跨網(wǎng)絡(luò )(across-network)的操作時(shí),將會(huì )使你的工作更加簡(jiǎn)單。

Git 是一個(gè)開(kāi)源的版本控制系統,設計來(lái)處理分布在多個(gè)存儲庫的大項目。在 Android 背景中,我們可以使用 Git 進(jìn)行本地操作,如本地分支,提交,差異,和編輯。其中我們在建立 Android 項目所面臨的其中一個(gè)挑戰就是如何最好地支持外界社區——從愛(ài)好社區到大型 OMEs 構建大眾消費設備。我們希望組件能夠被替換,我們還想要有趣的組件去發(fā)展他們在 Android 以外的生活。我們首先選擇一個(gè)分布式的版本控制系統,然后進(jìn)一步將其縮小到 Git。

Repo 是我們建立在 Git 頂部的一個(gè)存儲庫管理工具。Repo 在必要時(shí)可以統一許多個(gè) Git 倉庫,上傳到我們的 版本控制系統,并且自動(dòng)化 Android 部分開(kāi)發(fā)工作流程。Repo 并不意味著(zhù)取代 Git,只是幫助更容易地在 Android 環(huán)境中使用 Git。Repo 命令是一個(gè)可執行的 Python 腳本,你可以把它放在你的任何路徑上。在使用 Android 源文件工作時(shí),你將把 Repo 使用于跨網(wǎng)絡(luò )操作。例如,使用一個(gè)單一的 Repo 命令,你就可以從多個(gè)存儲庫下載文件到你的本地目錄下。

Gerrit 是一個(gè)基于 Web 的代碼審查系統,使用的是 Git。Gerrit 鼓勵所有授權用戶(hù)更多的集中使用 Git 來(lái)提交變化,如果他們發(fā)布代碼審查,Gerrit 將可以進(jìn)行自動(dòng)合并。此外,Gerrit 通過(guò)瀏覽器顯示每一步變化使審查變得更加容易,并且支持內聯(lián)注釋。

基本工作流程

與存儲庫交互的基本模式如下:

  1. 使用 repo start 開(kāi)始一個(gè)新的主題分支。
  2. 編輯文件。
  3. 使用 git add 暫存更改。
  4. 使用 git commit 提交更改。
  5. 使用 repo upload 上傳更改到審查服務(wù)器。

http://wiki.jikexueyuan.com/project/android-source/images/developing1.png" alt="images" />

任務(wù)參考

下面的任務(wù)列表總結了如何進(jìn)行普通的 Repo 和 Git 任務(wù)操作。關(guān)于使用 Repo 下載資源的信息,請參閱 下載資源使用 Repo。

同步你的客戶(hù)端

同步所有可用項目的文件:

$ repo sync

同步已選擇項目的文件:

$ repo sync PROJECT0 PROJECT1 PROJECT2 ...

創(chuàng )建主題分支

當你開(kāi)始進(jìn)行一個(gè)改變時(shí),在你的本地工作環(huán)境上新建一個(gè)主題分支,例如當你開(kāi)始解決 bug 或開(kāi)發(fā)新功能的時(shí)候。主題分支不是原始文件的復制;它是一個(gè)特定的提交的指向。這使得創(chuàng )建的本地分支能在它們之間進(jìn)行輕微操作的切換。通過(guò)使用分支,你可以把當前的工作與其他工作分離。有關(guān)使用主題分支的一篇有趣的文章,請參閱 分離特性分支。

使用 Repo 開(kāi)始一個(gè)主題分支,導航到該項目進(jìn)行修改和發(fā)布:

$ repo start BRANCH_NAME .  

請注意,這個(gè)期間是在當前工作目錄下。驗證是否已創(chuàng )建新的分支:

$ repo status .

使用主題分支

要指定分支到一個(gè)特定的項目:

$ repo start BRANCH_NAME PROJECT_NAME

查看 android.googlesource.com 所有項目的列表。此外,如果你已經(jīng)導航到特定項目的目錄,那么你可以簡(jiǎn)單地傳遞一個(gè)時(shí)期代表當前項目。

要切換到您在本地工作環(huán)境中創(chuàng )造的另一個(gè)分支:

$ git checkout BRANCH_NAME

查看現有分支的列表:

$ git branch

$ repo branches

當前分支的名字將被標星號表示優(yōu)先。

注意:一個(gè) bug 可能會(huì )導致 repo sync 重置本地的分支。如果你運行 repo sync 之后, git branch 顯示 *(沒(méi)有分支),那就再次運行 git checkout。

暫存文件

默認情況下,Git 通知但沒(méi)有跟蹤你在一個(gè)項目中所做的更改。為了讓 Git 保存你的更改,你必須將它們標記在一個(gè) commit 中。這也稱(chēng)之為 “staging(暫存)”。

你可以在運行下面命令來(lái)暫存更改

git add

它接受作為參數的項目目錄中的任何文件或目錄。盡管 git add 并不如名字表示的這樣簡(jiǎn)單地將文件添加到 Git 倉庫,但是它也是可以用來(lái)暫存文件的修改和刪除的。

查看客戶(hù)端狀態(tài)

列出文件的狀態(tài):

$ repo status

查看未提交的編輯:

$ repo diff  

repo diff 命令能夠顯示你所做的每一個(gè)本地編輯,除了已經(jīng)進(jìn)入提交的,如果你正準備現在提交。如果你現在提交,那么你將進(jìn)入提交并且可以看到每一個(gè)編輯狀態(tài),你需要一個(gè) Git 命令,即 git diff 。運行它之前,首先確定你是在當前項目的目錄下:

$ cd ~/WORKING_DIRECTORY/PROJECT  
$ git diff ——cached

提交更改

在 Git 中,一個(gè) commit 是版本控制的一個(gè)基本單位,是組成目錄結構的一個(gè)快照(snapshot),也是組成整個(gè)項目的文件內容。在 Git 中創(chuàng )建一個(gè) commit 很簡(jiǎn)單,只需要輸入如下代碼:

git commit

你將在你最喜歡的編輯器中收到一條 commit 消息的提示;請為你提交到 AOSP 的更改都提供一條有效信息。如果你不添加記錄信息,你的 commit 將會(huì )被中止。

上傳更改到 Gerrit

上傳之前,更新到最新版本:

repo sync  

然后運行

repo upload

這將會(huì )把你已經(jīng)提交的更改列表出來(lái),并且提示你選擇分支上傳到審查服務(wù)器。如果只有一個(gè)分支,那么你會(huì )看到一個(gè)簡(jiǎn)單的 y/n 提示。

恢復同步?jīng)_突

如果一個(gè) repo sync 顯示同步?jīng)_突:

  • 查看拆分的文件(status code = U)。
  • 必要時(shí)編輯沖突區域。
  • 在相關(guān)的項目目錄中更改,為上述文件運行 git addgit commit,然后 “rebase” 這個(gè)更改。例如:

      $ git add .        
      $ git commit   
      $ git rebase --continue  
  • 當 rebase 完成時(shí)再一次開(kāi)始完整的同步:

      $ repo sync PROJECT0 PROJECT1 ... PROJECTN

清理你的客戶(hù)端文件

更改被合并到 Gerrit 之后更新你的本地工作目錄:

$ repo sync

安全的移除已過(guò)時(shí)的主題分支:

$ repo prune

刪除客戶(hù)端

因為所有暫存文件都存儲在你的客戶(hù)端,你只需要從你的文件系統直接刪除目錄:

$ rm -rf WORKING_DIRECTORY

刪除客戶(hù)端將會(huì )永久地刪除你還沒(méi)有上傳審查的更改。

Git 和 Repo 備忘錄

http://wiki.jikexueyuan.com/project/android-source/images/developing2.png" alt="images" />