repo 學習教程

你現在會用 git 了,接下來學 repo(Google 推出來的多倉庫管理工具),其實就是在 Git 的基礎上做了一層封裝,方便同時管理很多 Git 倉庫。像 Android 源碼、Rockchip 全套 SDK 都是靠 repo 來拉取和管理的。

我給你分幾個層次講:


🔹 一、repo 是什么

  • 本質:一個 Python 腳本,封裝了很多 Git 命令。

  • 用途:管理多倉庫項目,比如 Android 系統源碼包含幾百個 git 倉庫,一個個 clone 太麻煩,所以用 repo。

  • 工作方式

    1. 項目里有個 manifest.xml 文件,定義了有哪些倉庫、各自路徑、用什么分支。
    2. repo 讀取 manifest.xml,幫你批量 clone/pull/checkout 這些倉庫。

🔹 二、repo 的基本安裝

# 下載 repo 工具
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH   # 寫到 ~/.bashrc 里

🔹 三、repo 的常用命令(和 git 對照著看)

1. 初始化(類似 git clone)

repo init -u <manifest的git地址> -b <分支>

例子:

repo init -u https://github.com/AOSP/platform_manifest.git -b master

這里 -u 是 manifest 倉庫的地址,-b 是分支。

2. 下載源碼(類似 git pull)

repo sync

會根據 manifest.xml 把所有倉庫拉下來。

3. 查看倉庫狀態(類似 git status)

repo status

可以看到所有子倉庫有沒有修改。

4. 提交代碼

repo 本身不直接管提交,你還是用 git 提交:

git add .
git commit -m "fix xxx"

5. 提交到服務器(批量上傳)

repo upload .

(適合 Android Gerrit 流程;普通 git 服務器還是用 git push

6. 其他常見命令

  • 查看當前倉庫列表:

    repo list
    
  • 同步單個倉庫:

    repo sync path/to/project
    
  • 切換所有倉庫到某個分支:

    repo forall -c 'git checkout dev'
    

🔹 四、學習建議(新手路線)

  1. 先理解 manifest.xml
    打開 manifest.xml 看看,里面有 <project name="..." path="..." revision="..."/>,意思就是:

    • name:遠程倉庫名
    • path:本地目錄名
    • revision:分支
  2. 動手練習

    • 找個開源的 Android manifest 倉庫,repo init + repo sync 把代碼拉下來。
    • 改一個子倉庫的代碼,用 git commit 提交。
    • 再用 repo status 看修改效果。
  3. 逐漸過渡到多倉管理
    你可以自己寫個簡單的 manifest.xml,里面定義 2-3 個 git 倉庫,用 repo 來管理。這樣對比就能看懂 repo 的價值。


👉 總結:

  • git 是單倉庫管理,你已經會了。
  • repo 是多倉庫管理,重點是學會 repo initrepo syncrepo forallrepo status
  • 真正提交代碼還是用 git,repo 主要幫你批量拉取和切換分支。

要不要我幫你寫一個 最小化的 manifest.xml 示例,你可以直接練習 repo init/sync




👌 好的,那我就當你是第一次接觸 repo,從零開始寫一個“教科書級別”的教程,帶你從概念、安裝、原理、到實踐,一步一步來,盡量用大白話解釋。


📖 repo 入門超詳細教程(適合初學者)

1. 為什么要學 repo?

你現在已經會 git 了,它可以:

  • git clone 拉一個倉庫
  • git pull 更新倉庫
  • git push 提交代碼

👉 問題來了:如果一個大項目有 幾百個 git 倉庫 怎么辦?
比如 Android 系統:

  • kernel 在一個倉庫
  • bootloader 在一個倉庫
  • HAL 在另一個倉庫
  • 應用、驅動、文檔也都在不同倉庫

如果你自己 git clone 幾百次,麻煩到爆炸!

所以 Google 設計了 repo

  • 你只要下載 一個 manifest 文件(倉庫列表)
  • repo 會幫你把所有倉庫拉下來、更新、切換分支

可以理解為:

repo = 管理很多 git 倉庫的“管家”
git = 管理單個倉庫的工具


2. 安裝 repo

  1. 在 Linux(Ubuntu/Debian 為例)里新建一個目錄保存 repo 工具:

    mkdir -p ~/bin
    
  2. 下載 repo 腳本:

    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    
  3. 加執行權限:

    chmod a+x ~/bin/repo
    
  4. 加到環境變量(寫到 ~/.bashrc):

    export PATH=~/bin:$PATH
    source ~/.bashrc
    

檢查是否安裝成功:

repo --version

如果能輸出版本號,說明 OK ?


3. repo 的核心原理(大白話版)

repo 其實就是依賴一個 manifest.xml 文件,這個文件里面寫著:

<manifest><remote name="origin" fetch="https://github.com/" /><default revision="main" remote="origin" sync-j="4" /><project name="torvalds/linux" path="kernel" revision="master" /><project name="git/git" path="tools/git" revision="master" />
</manifest>

解釋:

  • <remote> 定義遠程倉庫的地址前綴

  • <default> 定義默認的分支、遠程、同步方式

  • <project> 定義一個子倉庫:

    • name:遠程倉庫名
    • path:下載到本地的路徑
    • revision:要拉的分支

👉 這樣,repo 就能批量 clone/pull 這些倉庫。


4. repo 的常用命令(一步步學)

① 初始化項目(類似 git clone

repo init -u <manifest 倉庫地址> -b <分支>

例子:

repo init -u https://android.googlesource.com/platform/manifest -b master

這一步會下載 manifest.xml,相當于告訴 repo:“我的項目有哪些倉庫”。


② 拉取所有倉庫(類似 git pull

repo sync

它會根據 manifest.xml,把所有項目都下載下來。

小技巧:

  • repo sync -c 只拉取當前分支
  • repo sync -j4 并行下載,速度快

③ 查看所有倉庫狀態(類似 git status

repo status

會列出所有子倉庫的修改情況。


④ 在所有倉庫里執行命令

repo forall -c 'git branch'

意思是:在每個子倉庫里都執行 git branch,看看都在哪個分支。


⑤ 提交代碼

注意:repo 不改變 git 的使用方式,還是用 git 提交:

git add .
git commit -m "fix bug"
git push origin dev

如果你是 Android Gerrit 開發環境,可以用:

repo upload .

(這個命令會幫你 push 到 Gerrit 審核服務器)


5. 實戰:寫一個自己的 repo 項目

我們自己寫一個最小化的 manifest 來體驗一下:

  1. 新建一個目錄:

    mkdir ~/myrepo && cd ~/myrepo
    
  2. 創建 manifest 倉庫(比如放到 GitHub 上),在里面寫 default.xml

    <manifest><remote name="origin" fetch="https://github.com/" /><default revision="master" remote="origin" sync-j="4" /><project name="torvalds/linux" path="kernel" revision="master" /><project name="git/git" path="tools/git" revision="master" />
    </manifest>
    
  3. 初始化并下載:

    repo init -u https://github.com/你的用戶名/manifest.git -b master
    repo sync
    
  4. 看效果:

    tree .
    

    你會發現 kerneltools/git 兩個倉庫都被拉下來了。


6. 學習路線圖(適合你這樣的初學者)

  1. 第一步:在一個小項目里用 repo,熟悉命令(initsyncstatusforall)。
  2. 第二步:打開 manifest.xml,理解里面倉庫的組織方式。
  3. 第三步:在大項目(比如 Android 或者 Rockchip SDK)里使用 repo,體會它管理幾百個倉庫的威力。

7. 總結(背口訣)

  • git 管理一個倉庫repo 管理很多倉庫

  • 常用命令:

    • repo init → 初始化
    • repo sync → 拉源碼
    • repo status → 看修改
    • repo forall → 批量執行命令

repo 本質還是 git,所以你 git 學得越熟,repo 就越容易。


要不要我幫你寫一個 “小白練手用的 manifest.xml + 步驟腳本”,你直接復制粘貼就能玩?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98302.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98302.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98302.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[SWERC 2020] Safe Distance題解

[SWERC 2020] Safe Distance 題意 給定 NNN 個點與一個坐標 (X,Y)(X,Y)(X,Y)&#xff0c;求從點 (0,0)(0,0)(0,0) 到點 (X,Y)(X,Y)(X,Y) 規劃一條路線&#xff0c;不能走出 (0,0)(0,0)(0,0) 與 (X,Y)(X,Y)(X,Y) 間形成的矩形&#xff0c;使得通過這條路線時距離最近的點的距離…

Rewind-你人生的搜索引擎

本文轉載自&#xff1a;Rewind-你人生的搜索引擎 - Hello123工具導航 ** 一、&#x1f50d; Rewind 是什么&#xff1f;你的數字記憶增強神器 Rewind 是一款人工智能驅動的個人記憶助手&#xff0c;就像為你配備了一個「數字第二大腦」。它能自動記錄、保存并索引你在電腦和手…

開發小點 - 存

開發小點 1.Req注解 EqualsAndHashCode(callSuper true) Data public class BillSituationReq extends BillQueryReq {/*** Whether to display the ring ratio, default is not displayed*/ApiModelProperty("Whether to Display YoY Comparison")private Boolean …

只會npm install?這5個隱藏技巧讓你效率翻倍!

原文鏈接&#xff1a;https://mp.weixin.qq.com/s/nijxVWj-E5U08DX2fl3vgg最近有個剛學前端的小伙伴問我&#xff1a;“為什么我的node_modules這么大&#xff1f;為什么別人裝依賴那么快&#xff1f;npx到底是啥玩意兒&#xff1f;” 相信不少人都跟他一樣&#xff0c;對npm的…

(二).net面試(static)

文章目錄項目地址一、基礎501.1 new keyword1.2 static class vs. static method1. static class2. static method3. static constructor 靜態構造函數4. 靜態成員的生命周期1.3 LinQ1.what is LinQ2. List<T>、IEnumerable<T>、IQueryable<T>3. 在數據庫里用…

docker,本地目錄掛載

理解Docker本地目錄掛載的基本概念Docker本地目錄掛載允許容器與宿主機共享文件或目錄&#xff0c;實現數據持久化和實時交互。掛載方式分為bind mount和volume兩種&#xff0c;前者直接映射宿主機路徑&#xff0c;后者由Docker管理存儲路徑。本地目錄掛載的核心方法bind mount…

IO多路復用相關知識

select、poll、epoll 在傳入的性能差異是不是體現在&#xff0c;當有新的連接過來&#xff0c;此時需要將新的fd傳入到內核中&#xff0c;但是poll/select需要出入整個數組&#xff0c;而epoll方式只需要出入單個fd&#xff1f; 1. select/poll 的情況它們沒有內核中“長期保存…

【CF】Day139——雜題 (絕對值變換 | 異或 + 二分 | 隨機數據 + 圖論)

B. Meeting on the Line題目&#xff1a;思路&#xff1a;數形結合首先考慮如果沒有 t 的影響該怎么寫顯然我們就是讓最大時間最小化&#xff0c;那么顯然選擇最左端點和最右端點的中間值即可&#xff0c;即 (mi mx) / 2&#xff0c;那么現在有了 t 該怎么辦我們不妨考慮拆開絕…

在 Ubuntu 上安裝和配置 PostgreSQL 實錄

一、查看ubuntu版本 lsb_release -a postgresq盡量安裝在新的穩定版本的ubuntu上 二、安裝postgresql 2.1 直接安裝 sudo apt install postgresql 結果如下 2.2 使用PPA源安裝 Ubuntu官方源提供了PostgreSQL的PPA(Personal Package Archive),通過PPA源安裝可以確保獲取…

WebGIS三維可視化 + 數據驅動:智慧煤倉監控系統如何破解煤炭倉儲行業痛點

目錄 一、項目背景&#xff1a;煤炭倉儲管理的痛點與轉型需求 二、建設意義&#xff1a;從 “被動管理” 到 “主動掌控” 的價值躍遷 三、項目核心&#xff1a;技術架構與核心目標的深度融合 四、數據與技術&#xff1a;系統穩定運行的 “雙支柱” &#xff08;一&#x…

使用 Spring Security 實現 OAuth2:一步一步的操作指南

前言 OAuth 是一種授權框架&#xff0c;用于創建權限策略&#xff0c;并允許應用程序對用戶在 HTTP 服務&#xff08;如 GitHub 和 Google&#xff09;上的賬戶進行有限訪問。它的工作原理是允許用戶授權第三方應用訪問他們的數據&#xff0c;而無需分享他們的憑證。本文將指導…

VMware共享文件夾設置

啟用共享文件夾 編輯虛擬機設置-選項-共享文件夾&#xff0c;上面的選項選擇啟用下面點擊添加一個路徑&#xff0c;跟著向導走 設置共享文件夾在主機的路徑&#xff0c;和文件夾名稱添加完成后可以點擊這個共享文件夾條目&#xff0c;查看屬性虛擬機里安裝vm-tools sudo apt up…

華為云昇騰云服務

華為云&#xff0c;一切皆服務共建智能世界云底座面向未來的智能世界&#xff0c;數字化是企業發展的必由之路。數字化成功的關鍵是以云原生的思維踐行云原生&#xff0c;全數字化、全云化、AI驅動&#xff0c;一切皆服務。華為云將持續創新&#xff0c;攜手客戶、合作伙伴和開…

Axum 最佳實踐:如何構建優雅的 Rust 錯誤處理系統?(三)

引言 作為開發者&#xff0c;我們都經歷過這樣的場景&#xff1a;項目上線后&#xff0c;你打開日志監控&#xff0c;鋪天蓋地的 500 Internal Server Error 撲面而來。這些錯誤像個黑洞&#xff0c;吞噬著你的調試時間&#xff0c;你甚至不知道它們是從數據庫查詢失敗&#x…

MySQL高可用方案解析:從復制到云原生

MySQL 的高可用 (High Availability, HA) 方案旨在確保數據庫服務在硬件故障、軟件崩潰、網絡中斷或計劃維護時仍能持續可用&#xff0c;最小化停機時間&#xff08;通常目標為 99.9% 至 99.999% 可用性&#xff09;。以下是 MySQL 領域成熟且廣泛應用的幾種主流高可用方案&…

騰訊云語音接口實現會議系統

1.前言 在現代企業協作環境中&#xff0c;高效的會議管理是提升團隊生產力的關鍵。本文將深入解析一個完整的會議管理系統&#xff0c;涵蓋從會議創建到總結生成的完整生命周期。該系統構建一個基于AI技術的智能會議系統&#xff0c;實現會議全流程的智能化管理&#xff0c;包括…

【LeetCode 每日一題】1277. 統計全為 1 的正方形子矩陣

Problem: 1277. 統計全為 1 的正方形子矩陣 文章目錄整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(m * n)空間復雜度&#xff1a;O(m * n)整體思路 這段代碼旨在解決一個經典的二維矩陣問題&#xff1a;統計全為 1 的正方形子矩陣個數 (Count Square Submatrices with …

【論文閱讀】MedResearcher-R1: 基于知識引導軌跡合成框架的專家級醫學深度研究員

論文鏈接&#xff1a;https://arxiv.org/pdf/2508.14880 【導讀】當通用大模型還在“背題庫”時&#xff0c;螞蟻集團聯合哈工大推出的 MedResearcher-R1 已把“臨床查房”搬進訓練場&#xff01;這篇 2025 年 9 月發布的論文&#xff0c;首次讓開源 32B 模型在醫學深度研究基準…

基于大語言模型的事件響應優化方案探索

程序員的技術管理推薦閱讀 當愿望遇上能力鴻溝&#xff1a;一位技術管理者眼中的團隊激勵思考 從“激勵”到“保健”&#xff1a;80后與90后程序員&#xff0c;到底想要什么&#xff1f; 從“激勵”到“保健”&#xff1a;80后與90后程序員&#xff0c;到底想要什么&#xff1f…

數字化浪潮下,傳統加工廠如何智能化轉型?

在制造業向高端化、服務化升級的今天&#xff0c;傳統加工廠正面臨前所未有的挑戰。訂單碎片化、人力成本攀升、設備OEE&#xff08;綜合效率&#xff09;長期低于50%、質量波動難以追溯……這些痛點不僅壓縮著企業利潤空間&#xff0c;更讓其在應對市場需求變化時顯得遲緩。當…