repo倉庫配置搭建及基礎命令學習


一:repo簡介

       Android使用Git進行代碼管理,而Repo命令行工具對Git命令進行了封裝,是在Git之上構建的工具(它其實是一個python腳本),方便管理多個git項目,從而更好地對代碼進行集中式管理。

repo使用過程分如下幾步:

1.運行repo init 命令,克隆Android的一個清單庫,這個清單庫是通過xml文件建立的版本清單庫。

2.清單庫中的manifest.xml文件,列出了各個版本庫克隆所需要的參數信息;包括版本庫的地址、工作區定義的目錄結構,以及分支的對應關系。

3.運行repo sync的命令,開始同步,即分別克隆xml文件中的版本庫數據到本地的工作區中。

4.對各個版本庫進行切換分支操作,切換到某個分支操作提交並push到遠程。

【【【主要操作步驟見紅色字體;請確保操作如下步驟之前在gerrit.dd.net的個人賬號下配置了本地機器的ssh public key】】】

二:配置ssh config  

按如下方式在~/.ssh/config里配置:(若沒有config文件需要新建)

Host gerrit.dd.net
HostName gerrit.dd.net
User 你的gerrit賬戶名
IdentityFile ~/.ssh/id_rsa
PubkeyAuthentication yes

三:安裝repo:下載Repo只針對第一次使用。 

        1. 確認主目錄下存在 bin/ 目錄並已包含在路徑中:mkdir ~/bin          PATH=~/bin:$PATH  

        2.下載Repo工具並設置可執行的權限: curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo      chmod a+x ~/bin/repo

        3.這里的repo只是一個引導腳本而不是直接稱之為repo,因為repo大部分功能代碼都不在其中,下載的只是幫助這個repo程序繼續下載和加載的工具。

注:修改repo腳本參數的repo_url :REPO_URL ='ssh://gerrit.dd.net:29418/git-repo' 

四:repo和清單庫的初始化

      下載並保存repo引導腳本后,建立一個工作目錄,這個工作目錄將作為Android工作區目錄。在工作目錄中執行repo init -u <url>,完成repo完整的下載及項目清單版本庫的下載。

      mkdir workspace     cd workspace     repo init -u ssh://gerrit.dd.net:29418/manifest --no-repo-verify (注意:manifest倉庫地址需要研發組內給出

      命令repo init要完成如下操作:

      1.完成repo工具的完整下載,現在僅有的不過是repo 的引導程序。初始化操作會從repo腳本里設定的鏡像地址中克隆repo.git庫到當前的目錄下。一個隱藏的.repo目錄。

      2.克隆創建的清單庫manifest.git(地址來自與-u參數),清單庫實際上只包含一個default.xml文件,這個XML文件定義了多個版本庫和本地地址的映射關系,是repo工作的指引文件。

      3.克隆的清單庫位於.repo/manifests.git中,本地克隆到.repo/manifests。自己新建的git倉庫里邊就放了個簡單的default.xml文件:ssh://gerrit.dd.net:29418/manifest 

      repo引導腳本的init子命令可以使用下列和清單庫相關的參數:

           -u:指定一個URL,其連接到一個maniest倉庫

           -m :在manifest倉庫中選擇一個xml文件

           -b:選擇一個maniest倉庫中的一個特殊的分支

           --repo-url:設定repo的版本庫地址。

           --repo-branch:設定需要檢出的分支。

           --no-repo-verify:設定不要對repo的里程碑簽名進行嚴格的驗證。

           --mirror:只在repo第一次初始化的時候使用,建立本地鏡像

 五:同步項目

       repo sync 默認同步xml文件中定義的所有倉庫,可以單獨指定sync哪個或哪些倉庫: repo sync name1  name2

       如果某個工程從未同步過,repo sync相當於git clone。所有遠程倉庫的分支都會被拷貝到本地倉庫。

       如果工程已經同步過,repo sync相當於: git remote update     git rebase origin/branch

      (注:branch是本地工程目錄當前分支。如果當前分支不是遠程倉庫任意分支的跟蹤分支,那么這個工程不會發生同步。相反,就會進行合並操作。合並中有沖突,使用Git相關命令處理。)

 六:修改提交並push到遠程

       cd進入到sync到本地的某個分支倉庫目錄,修改提交,git branch發現倉庫都是no branch狀態:push到遠程時用命令:git push origin HEAD:master

七:repo常用命令

       a .  repo init

       b .  repo sync

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

       d .  repo diff  [project list]:顯示提交的代碼和當前工作目錄代碼之間的差異

       e .  repo download :

       f .  repo forall -c “command”:這個命令會遍歷所有的git倉庫,並在每個倉庫執行-c所指定的命令(這個被執行的命令就不限於僅僅是git命令了,而是任何被系統支持的命令,比如:ls 、 pwd 、cp 等)

             例如:repo forall –c “echo $REPO_PATH”     repo forall –c “git reset –hard HEAD”   環境變量: REPO_PROJECT    REPO_PATH   REPO_REMOTE

       g .  repo prune  [project list]:  實際上是對git branch –d命令的封裝,該命令用於掃描項目的各個分支,並刪除已經合並的分支,

       h .  repo start newbranchname [project list] :在指定工程倉庫創建一個當前所在遠程分支的跟蹤分支,並切到跟蹤分支。

       i .  repo status  [project list] :顯示當前工作目錄的狀態或指定工程名或者工程路徑的狀態。

       j .  repo manifest -o default.xml -r :獲取倉庫的sha1值,並記錄在一個新的default.xml文件中

 

 default.xml 示例:

<?xml version="1.0" encoding="UTF-8"?>

<manifest>

<! -- remote元素設置遠程服務器屬性,可以為多個:name設置遠程服務器名,用於git fetch,git remote等操作;fetch 所有project的git url前綴;指定gerrit的服務器名,用於repo upload操作 -->

<remote name="origin"   fetch="gerrit.dd.net"   review="http://gerrit.dd.net"/>

<! -- default元素設定所有peoject的默認屬性值:revision為git分支名,如master或refs/heads/master;remote為某一個remote元素的name屬性值,用於指定使用哪一個遠程服務器;sync-j為sync操作時的線程數-->

<default revision="master"  remote="origin"  sync-j="4" />

<! -- project元素指定一個需要clone的git倉庫:path指定clone出來的git倉庫在本地的地址;name唯一的名字表示project,用於拼接生成項目 git倉庫的url;revision:指定需要獲取的git提交點,可以定義成固定的branch,或者是明確的commit 哈希值 -->

<project path="fanxiao/fanxiaotest1" name="MA/Applications/app-a"  revision="master" />
<project path="fanxiao/fanxiaotest2" name="MA/Applications/app-b" revision="52cf9185ff1d" />
<project path="fanxiao/fanxiaotest3" name="fanxiaotest"  revision="master"/>

</manifest>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM