android repo學習

如何取得 Android 源代碼 Git 是 Linux Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的分佈式版本 控制軟件,它不同於 Subversion、CVS 這樣的集中式版本控制系統。在集中式版本控制系統 中只有一個倉庫(repository) ,許多個工作目錄(working copy) ,而像 Git 這樣的分佈式 版本控制系統中(其他主要的分佈式版本控制系統還有 BitKeeper、Mercurial、GNU Arch、 Bazaar、Darcs、SVK、Monotone 等) ,每一個工作目錄都包含一個完整倉庫,它們可以支持 離線工作,本地提交可以稍後提交到服務器上。分佈式系統理論上也比集中式的單服務器系 統更健壯,單服務器系統一旦服務器出現問題整個系統就不能運行了,分佈式系統通常不會 因爲一兩個節點而受到影響。 因爲 Android 是由 kernel、Dalvik、Bionic、prebuilt、build 等多個 Git 項目組成,所以 Android 項目編寫了一個名爲 Repo 的 Python 的腳本來統一管理這些項目的倉庫,使得 Git 的使用更加簡單。 這幾天 William 爲了拿 Android 最新的 sourcecode,學習了一下 git 和 repo 的一些基本操 作,整理了一個如何取得 Android 代碼的 How-To,今天把他貼上來。 1、Git 的安裝 在 Ubuntu 8.04 上安裝 git 只要設定了正確的更新源,然後使用 apt-get 就可以了,有什麼 依賴問題, 就讓它自己解決吧。 其中 cURL 是一個利用 URL 語法在命令行下工作的文件傳輸工 具,會在後面安裝 Repo 的時候用到。 sudo apt-get install git-core curl 2、安裝 Repo 首先確保在當前用戶的主目錄下創建一個/bin 目錄(如果沒有的話) ,然後把它(~/bin)加到 PATH 環境變量中 接下來通過 cURL 來下載 Repo 腳本,保存到~/bin/repo 文件中 curl http://android.git.kernel.org/repo >~/bin/repo 別忘了給 repo 可執行權限 chmod a+x ~/bin/repo 3、初始化版本庫 如果是想把 Android 當前主線上最新版本的所有的 sourcecode 拿下來,我們需要 repo 的幫 助。 先建立一個目錄,比如~/android,進去以後用 repo init 命令即可。 repo init -u git://android.git.kernel.org/platform/manifest.git 這個過程會持續很長的時間(至少可以好好睡一覺) ,具體要多少時間就取決於網絡條件了 最後會看到 repo initialized in /android 這樣的提示,就說明本地的版本庫已經初始化 完畢,並且包含了當前最新的 sourcecode。 如果想拿某個 branch 而不是主線上的代碼,我們需要用-b 參數制定 branch 名字,比如: repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake 另一種情況是, 我們只需要某一個 project 的代碼, 比如 kernel/common, 就不需要 repo 了, 直接用 Git 即可。 git clone git://android.git.kernel.org/kernel/common.git 這也需要不少的時間,因爲它會把整個 Linux Kernel 的代碼複製下來。 如果需要某個 branch 的代碼, git checkout 即可。 用 比如我們剛剛拿了 kernel/common.get 的代碼,那就先進入到 common 目錄,然後用下面的命令: git checkout origin/android-goldfish-2.6.27 -b goldfish 這樣我們就在本地建立了一個名爲 goldfish 的 android-goldfish-2.6.27 分支, 代碼則已經 與 android-goldgish-2.6.27 同步。我們可以通過 git branch 來列出本地的所有分支。 4、同步版本庫 使用 repo sync 命令,我們把整個 Android 代碼樹做同步到本地,同樣,我們可以用類似 repo sync project1 project2 …?? 這樣的命令來同步某幾個項目 如果是同步 Android 中的單個項目,只要在項目目錄下執行簡單的 git pull 即可。 5、通過 GitWeb 下載代碼 另外,如果只是需要主線上某個項目的代碼,也可以通過 GitWeb 下載,在 shortlog 利用關 鍵字來搜索特定的版本,或者找幾個比較新的 tag 來下載還是很容易的。 Git 最初是爲 Linux 內核開發而設計, 所以對其他平臺的支持並不好, 尤其是 Windows 平臺, 必須要有 Cygwin 纔可以。現在,得益於 msysgit 項目,我們已經可以不需要 Cygwin 而使用 Git 了。另外,Git Extensions 是一個非常好用的 Windows Shell 擴展,它能與資源管理器 緊密集成,甚至提供了 Visual Studio 插件。它的官方網站上有一分不錯的說明文檔,感興 趣的朋友可以看一看。 至於 Git 的參考文檔,我推薦 Git Magic,這裏還有一個 Git Magic 的中文版。

1. Git Config:
$ git config --global user.name "Shilin Yi"$ git config --global user.email "[email protected]"
   配置git的參數變量,它可以帶以下2個參數:
   --system,針對系統的所有用戶的,對應的配置文件在/etc/gitconfig
   --global,針對系統當前用戶的,對應的配置文件在~/.gitconfig
   不帶參數,針對當前git倉庫的,對應的配置文件在.git/config
   如果在個人pc上使用git,加上參數--global即可
   如果在公共服務器上使用git,則一定不要帶那2個參數

2. Git push
$ git push ssh://[email protected]/rt4ls.git master // 把本地倉庫提交到遠程倉庫的master分支中
與以下兩條語句相同

添加一個標記,讓origin指向ssh://[email protected]/rt4ls.git,也就是說你操作origin的時候,實際上就是在操作ssh://[email protected]/rt4ls.git。origin在這裏完全可以理解爲後者的別名


$ git remote add origin ssh://[email protected]/rt4ls.git$ git push origin master
默認情況下這條語句等價於提交本地的master branch到遠程倉庫,並作爲遠程的master分支

$ git push origin test:master         // 提交本地test分支作爲由origin指向的遠程的master分支$ git push origin test:test              // 提交本地test分支作爲由origin指向的遠程的test分支如果想刪除遠程的分支呢?類似於上面,如果:左邊的分支爲空,那麼將刪除:右邊的遠程的分支。$ git push origin :test              // 剛提交到遠程的test將被刪除,但是本地還會保存的,不用擔心
3. 遠程分支
我們用 (遠程倉庫名)/(分支名) 這樣的形式表示遠程分支


$ git branch -r  origin/HEAD -> origin/master  origin/master$ git remote -vorigin  [email protected]:yottaa/router-fm.git (fetch)origin  [email protected]:yottaa/router-fm.git (push)$  git fetch origin  fetch由origin標示的遠程[email protected]:yottaa/router-fm.git到本地的origin/master上(但是你不能修改origin/master上的內容)說明:這裏origin使默認的名字,你也可以取別的名字
4. Git pull/fetch
git fetch origin master:test  #從origin指定的遠程獲取最新的版本到本地的test分支上,不會自動進行merge
git pull origin master           #從origin指定的遠程獲取最新的版本到本地,並自動進行merge到本地當前分支上


Git配置KDiff3
文章分類:軟件開發管理
Git支持很多merge工具, 我習慣用KDiff3

配置命令如下

git config --global -l
查看已經配置了什麼merge工具

如果沒有merge.tool和mergetool.kdiff3.path
則輸入
git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "D:/Program Files/KDiff3/kdiff3.exe"

路徑根據你的安裝位置

如果有

則輸入
git config --global merge.tool=kdiff3
git config --global mergetool.kdiff3.path="D:/Program Files/KDiff3/kdiff3.exe"



repo的用法(zz)

注:repo只是google用Python腳本寫的調用git的一個腳本,主要是用來下載、管理Android項目的軟件倉庫。(也就是說,他是用來管理給git管理的一個個倉庫的)

下載 repo 的地址: http://android.git.kernel.org/repo ,可以用以下二者之一來下載 repo

wget http://android.git.kernel.org/repo

或者

curl http://android.git.kernel.org/repo > ~/bin/repo  

下載完成後須修改repo的權限: chmod a+x ~/bin/repo

用repo sync 在抓去 android source code 的時候,會經常出現一些錯誤導致 repo sync 中斷,每次都要手動開始。 可以用如下的命令,來自動重複

$?=1;

while [ $? -ne 0 ] ;

do  repo sync ;

done

獲取幫助:

repo help [ command ]   //顯示command 的詳細的幫助信息內容

示例: repo help init 來獲取 repo init 的其他用法

repo init -u URL 用以在當前目錄安裝 repository ,會在當前目錄創建一個目錄 ".repo"  -u 參數指定一個URL, 從這個URL 中取得repository 的 manifest 文件。   

示例:repo init -u git://android.git.kernel.org/platform/manifest.git

獲取的manifest文件放在.repo目錄中。命名爲manifest.xml。這個文件的內容其實就是所有被git管理的倉庫的列表!

可以用 -m 參數來選擇獲取 repository 中的某一個特定的 manifest 文件,如果不具體指定,那麼表示爲默認的 namifest 文件 (default.xml)

repo init -u git://android.git.kernel.org/platform/manifest.git -m dalvik-plus.xml

(有諸多供我們選擇的manifest文件,所有的manifest文件都放在目錄.repo/manifests中,該目錄本身亦被git所管理,你可以cd進去看看)

可以用 -b 參數來指定某個manifest 分支。

repo init -u git://android.git.kernel.org/platform/manifest.git -b release-1.0

你會發現.repo/manifests是個被git管理的倉庫,這裏放的是所有的manifest文件(*.xml),因爲被git管理,固然有分支,-b可以切換到你想要的分支然後再下載相關的xml文件,當然具體下載那個xml還要看-m參數了,所以如果你僅僅指定-b而沒有-m的話,就是下載-b指定分支下的default.xml文件

如果不指定-b參數,那麼會默認使用master分支

4. repo sync [project-list]

下載最新本地工作文件,更新成功,這本地文件和repository 中的代碼是一樣的。 可以指定需要更新的project , 如果不指定任何參數,會同步整個所有的項目。

如果是第一次運行 repo sync , 則這個命令相當於 git clone ,會把 repository 中的所有內容都拷貝到本地。 如果不是第一次運行 repo sync , 則相當於 git remote update ;  git rebase origin/branch .  repo sync 會更新 .repo 下面的文件。 如果在merge 的過程中出現衝突, 這需要手動運行  git  rebase --continue

5. repo update[ project-list ]

上傳修改的代碼 ,如果你本地的代碼有所修改,那麼在運行 repo sync 的時候,會提示你上傳修改的代碼,所有修改的代碼分支會上傳到 Gerrit (基於web 的代碼review 系統), Gerrit 受到上傳的代碼,會轉換爲一個個變更,從而可以讓人們來review 修改的代碼。

6. repo diff [ project-list ]

        顯示提交的代碼和當前工作目錄代碼之間的差異。

7. repo download  target revision

        下載特定的修改版本到本地, 例如:  repo download pltform/frameworks/base 1241 下載修改版本爲 1241 的代碼

8. repo start newbranchname .

        創建新的branch分支。 "." 代表當前工作的branch 分支。

9.  repo prune [project list]

        刪除已經merge 的 project

10. repo foreach [ project-lists] -c command

       對每一個 project 運行 command 命令

12. repo forall -c

11. repo status

       顯示 project 中每個倉庫的狀態,並打印倉庫名稱。
發佈了13 篇原創文章 · 獲贊 13 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章