repo是Google開發(fā)的用于管理Android版本庫的一個(gè)工具,repo是使用Python對(duì)git進(jìn)行了一定的封裝,并不是用于取代git,它簡(jiǎn)化了對(duì)多個(gè)Git版本庫的管理。用repo管理的版本庫都需要使用git命令來進(jìn)行操作。
專注于為中小企業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)融安免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
清單文件是以xml的格式組織的,一個(gè)清單庫可以包含多個(gè)清單文件和多個(gè)分支,每個(gè)清單文件和分支都有對(duì)應(yīng)的版本。
remote元素
定義了名為korg的遠(yuǎn)程版本庫,庫的基址為git://172.16.1.31
project元素
用于定義一個(gè)項(xiàng)目,path屬性表示在工作區(qū)clone的位置,name屬性表示該項(xiàng)目的遠(yuǎn)程版本庫的相對(duì)路徑。
default元素
設(shè)置各個(gè)項(xiàng)目默認(rèn)遠(yuǎn)程版本庫為Korg,默認(rèn)的分支為gingerbread-exdroid-stable。各個(gè)項(xiàng)目還可以定義自己的remote和revision覆蓋默認(rèn)的配置。
project元素下的子元素copyfile
定義了項(xiàng)目clone后的一個(gè)附件動(dòng)作,從src拷貝文件到dest
新建項(xiàng)目存放的文件夾
mkdir mstar648
進(jìn)入到項(xiàng)目文件夾
cd mstar648
執(zhí)行代碼拉取的命令
repo init -u ssh://ppgerrit.com/Mstar648/manifest.git -b 648_cultraview -m ppos4.5.0_cultraview.xml
通過如下命令查看mstar648目錄下
ls -a
可以看到目錄下有個(gè).repo文件夾,說明mstar648項(xiàng)目是一個(gè)用repo管理的版本庫。
可以看到.repo目錄下有manifest、project、repo文件夾等信息。
如果想查看Python封裝的腳本,可到.repo/repo下看到:
如果想查看某個(gè)模塊當(dāng)前是在哪個(gè)分支,可以進(jìn)入到manifests中去:
因?yàn)槲覀儎偫〈a的時(shí)候是ppos4.5.0_cultraview.xml,所以通過vim打開ppos4.5.0_cultraview.xml,然后可以通過
/模塊名
查看到模塊的分支信息。例如我們要看到PposTv的分支信息,就可以搜索/PposTv
例如我們拉取代碼的時(shí)候的命令如下:
repo init -u ssh://ppgerrit.com/Mstar648/manifest.git -b 648_cultraview -m ppos4.5.0_cultraview.xml
其中:
-u:指定一個(gè)URL,其連接到一個(gè)manifest倉庫
-b:選擇manifest倉庫中的一個(gè)特殊分支
repo init要完成如下操作:
完成repo工具的完整下載,執(zhí)行的repo腳本只是引導(dǎo)程序
clone清單庫manifest.git (地址是-u后面的參數(shù))
clone的清單庫位于manifest.git中,clone到本地.repo/manifest中,.repo/manifest.xml只是符號(hào)鏈接,它指向的是.repo/manifests/default.xml
上面的拉取代碼示例選擇的是ppos4.5.0_cultraview.xml里面的配置,那么.repo/manifest.xml指向的是.repo/manifests/ppos4.5.0_cultraview.xml
執(zhí)行了repo init 命令后,我們需要執(zhí)行如下命令同步代碼:
repo sync
參照清單文件.repo/manifest.xml克隆并同步版本庫。如果項(xiàng)目版本庫不存在,則執(zhí)行repo sync命令相當(dāng)于執(zhí)行g(shù)it clone;如果項(xiàng)目版本庫存在,則相當(dāng)于執(zhí)行下面兩條指令:
git remote update
相當(dāng)于對(duì)每一個(gè)remote源執(zhí)行了fetch操作
git rebase origin/branch
對(duì)當(dāng)前分支的跟蹤分支執(zhí)行rebase操作
剛clone下來的代碼是沒有分支的,例如:
repo start 的實(shí)質(zhì)就是對(duì)git checkout -b 的封裝,可以為單個(gè)項(xiàng)目或所有項(xiàng)目以清單文件中已設(shè)定的分支為基礎(chǔ),在本地創(chuàng)建新的分支。
repo start 與 git checkout -b 的區(qū)別:
repo start 是在清單文件設(shè)定的分支基礎(chǔ)上創(chuàng)建新的分支
如果清單文件中設(shè)定的分支是remoteBranchName,創(chuàng)建新的分支localBranchName。
為單個(gè)項(xiàng)目創(chuàng)建localBranchName分支的命令如下:
repo start localBranchName 項(xiàng)目絕對(duì)路徑
為所有項(xiàng)目創(chuàng)建localBranchName分支的命令如下:
repo start localBranchName --all
本文下面所有的命令都是在單個(gè)項(xiàng)目中運(yùn)行!??!
例如查看上面拉取的mstar648項(xiàng)目下各模塊的分支信息
在mstar648項(xiàng)目下運(yùn)行如下命令:
repo branches
切換分支語法:
repo checkout brancnName
查看文件差異語法:
repo diff
該命令實(shí)際上是對(duì)git diff-index 和git diff-filse命令的封裝,同時(shí)顯示暫存區(qū)的狀態(tài)和本地文件修改的狀態(tài)
查看文件狀態(tài)語法:
repo status
其中:
每個(gè)小節(jié)的第一行顯示的是項(xiàng)目名稱和所在的分支名稱
每個(gè)小節(jié)的第二行的第一個(gè)字母表示暫存區(qū)文件修改的狀態(tài)
-:沒有改變
A:添加(不在HEAD中,在暫存區(qū)中)
M:修改(在HEAD中,在暫存區(qū)中,內(nèi)容不同)
D:刪除(在HEAD中,不在暫存區(qū))
R:重命名(不在HEAD中,在暫存區(qū),路徑修改)
C:拷貝(不在HEAD中,在暫存區(qū),從其他文件拷貝)
T:文件狀態(tài)改變(在HEAD中,在暫存區(qū),內(nèi)容相同)
每個(gè)小節(jié)的第二行的第二個(gè)字母表示工作區(qū)文件的更改狀態(tài)
-:新/未知(不在暫存區(qū),在工作區(qū))
m:修改(在暫存區(qū),在工作區(qū),被修改)
該命令實(shí)質(zhì)是對(duì)git branch -D的封裝,語法如下:
repo abandon branchName
該命令實(shí)質(zhì)是對(duì)git branch -d的封裝,用于掃描項(xiàng)目的各個(gè)分支,并刪除已經(jīng)合并的分支,語法如下:
repo prune
該命令實(shí)質(zhì)是對(duì)git add --interactive命令的封裝,用于將項(xiàng)目工作區(qū)中的改動(dòng)添加到暫存區(qū),語法如下:
repo stage -i
其中,-i表示 --interactive,給出個(gè)界面讓用戶選擇
語法如下:
repo remote addd remoteName url
例如:
repo remote add org ssh://172.16.1.31/git_repo
該命令是根據(jù)xml文件添加的遠(yuǎn)程分支,方便于向服務(wù)器提交代碼,執(zhí)行后的build目錄下看到新的遠(yuǎn)程分支是org
該命令相當(dāng)于一個(gè)迭代器,會(huì)遍歷當(dāng)前項(xiàng)目下所有的git倉庫,在所有指定的項(xiàng)目中執(zhí)行同一個(gè)shell命令。
語法如下:
repo forall -c 命令
其中,參數(shù)有:
-c:后面可以帶的任何可以被系統(tǒng)支持的shell命令(ls,cp,pwd等)
-p:在shell命令輸出之前列出項(xiàng)目名稱
該命令還可以添加環(huán)境變量:
環(huán)境變量的參數(shù)有如下幾種:
REPO_PROJECT:指定項(xiàng)目的名稱
REPO_PATH:指定項(xiàng)目在工作區(qū)的相對(duì)路徑
REPO_REMOTE:指定項(xiàng)目遠(yuǎn)程倉庫的名稱
REPO_LREV:指定項(xiàng)目最后一次提交服務(wù)器倉庫對(duì)應(yīng)的哈希值
如果-c后面的shell指令是上述的環(huán)境變量,則需要用單引號(hào)把shell指令括起來。
語法如下:
repo forall –c ‘echo $REPO_PROJECT’
例如將所有項(xiàng)目都切換到master分支。
repo forall -p -c git merge local
上面的命令就是將local分支合并到master分支上
在所有項(xiàng)目下打標(biāo)簽的命令如下:
repo forall -c git tag 標(biāo)簽名
repo安裝后,可以通過repo version命令查看版本號(hào)。
repo安裝后,可以找到總結(jié)所有命令的文檔,在終端運(yùn)行如下命令:
repo help
如果想查看具體的某條命令的詳細(xì)信息,可以通過如下命令:
repo help 命令名稱
例如想看start指令的具體信息:
網(wǎng)頁題目:一篇通俗易懂的repo教程
本文來源:http://muchs.cn/article14/ihcige.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、微信公眾號(hào)、App開發(fā)、定制網(wǎng)站、建站公司、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)